2010-04-20 127 views
18

我需要在没有安装Python的机器上运行Python脚本。我使用Python作为软件包的一部分,并且Python在幕布后面运行,而用户没有注意到它。在Win32上安装Python 2.6而不使用安装程序

我做了如下。

  1. 复制python.exe,python26.dll,MSVCR90.DLL和Microsoft.VC90.CRT.manifest
  2. 邮编在LIBS目录下的所有目录作为python26.zip
  3. 复制所有必要的dll/DLL目录内的pyd文件。

它似乎工作,但是当我将python26.zip更改为其他名称(如pythonlib.zip)时,它无法再找到Python库。

  • 问题1:python26.zip名称背后的魔法是什么? Python会自动在python26.zip中找到一个库,但不会以不同的名称?
  • 问题2:如果我在python.exe/python26.dll所在的同一目录下有python26.zip,我不需要添加路径sys.path.append(到python26.zip的路径)。这是对的吗?

Python有内置函数库,而sys就是其中之一。我认为我可以使用sys.path指向我需要的ZIP文件中的任何Python库。但是,令人惊讶的是,如果我使用Python26.zip的库名称,它只是工作。这是为什么?

+2

没有管理员权限? – 2010-04-20 21:22:24

+2

请注意手动安装Python。你可能会让它运行得很好,但安装任何额外的库是后面的主要痛苦。 – ktdrv 2010-04-20 21:26:34

+1

你可以使用py2exe打包你的应用程序吗? (它将包含一个exe文件中的解释器副本) – 2010-04-20 22:22:57

回答

10

我看了一下Python解释器的源代码,并做了一些实验。而且我发现Python解释器无论如何都会预先设定“PYTHONXXX.DLL + pythonXXX.zip的目录”。 XXX是Python解释器的版本。

因此,如果有python26。在与python26.dll相同的目录下压缩。我可以自动使用所有的Python库。

26

我一直在使用PortablePython一年,我觉得它很棒,因为它是在我的锁定工作笔记本上工作。

有一个Python 2.5.4,2.6.1和3.0.1版本。

+1

之前没有听说过PortablePython。伟大的提示。 – Frederik 2010-04-20 21:23:44

+0

你可以添加额外的模块到包含PP的USB,所以没有什么能阻止你使用它来完成你现在正在做的复制 – PPTim 2010-04-20 21:39:51

+0

ummmm的用户可能对他们周围发生的事情感到十分遗憾,但他们不会注意到USB驱动器? – 2010-04-21 00:26:01

2

py2exe将允许您将Python脚本编译为Windows可执行文件。它可能会或可能不会比PortablePython更好,但是对于您需要为“幕后”程序分发的文件数量来说,它可能会更清晰一些。

3

另一种选择可能是考虑PyInstaller,它将创建跨平台的独立Python应用程序。来自主页:

PyInstaller是一个在Windows,Linux和Mac OS X下将Python程序转换(打包)为独立可执行文件的程序。[...] PyInstaller的主要目标是与即开即用的第三方软件包兼容。这意味着,使用PyInstaller,所有使外部软件包工作所需的技巧已经集成在PyInstaller本身中,因此不需要用户干预。您永远不需要在维基中寻找技巧,并将自定义修改应用于您的文件或安装脚本。作为一个例子,像PyQt和Matplotlib这样的库完全受支持,而不必手动处理插件或外部数据文件。检查SupportedPackages的兼容性列表。

+0

PyInstaller不支持使用Python2.6的Windows。这对我来说是一个阻碍,也可能是为了其他人。 http://www.pyinstaller.org/wiki/Python26Win – blokeley 2010-04-21 08:19:51

5

另一种选择是安装WinPython。它使用安装程序,但不需要管理员权限(在Windows 7上测试)。与可移植的Python不同,它甚至有一个Python 3.3.5版本。

10

Sylvain Pointeau's blog

的过程其实很简单,只需要下载从 http://www.python.org/getit/ MSI安装程序,然后键入命令:

C:\development\apps>msiexec /a python-3.3.2.msi /qb TARGETDIR=C:\development\apps\python33

他的榜样使用MSIEXEC(又名MSI管理安装程序为您UniExtract人)强制提取到TARGETDIR。你会注意到那里是你删除的内部安装程序。

编辑:也可以让它保持沉默,但每次你想使用python这样做似乎是愚蠢的。只需解压缩到tempdir,然后在卸载它时进行清理。

PS:我没有看到这是多大年纪! :D

+1

我最近必须和2.7.11做类似的事情。此外,您将不得不手动安装pip(使用'get-pip.py'脚本)。 – Erik 2016-04-27 02:37:23

相关问题