在Win32上不使用安装程序安装Python 2.6
我需要在一台没有安装Python的机器上运行一个Python脚本。其实我用Python是作为一个软件包的一部分,Python在后台运行,用户并不会注意到它。
我做的步骤如下:
- 复制了python.exe、python26.dll、msvcr90.dll和Microsoft.VC90.CRT.manifest这几个文件。
- 把LIBs目录下的所有文件打包成一个叫python26.zip的压缩文件。
- 把DLL目录下所有需要的dll/pyd文件复制过来。
看起来这样是可以的,但当我把python26.zip改成其他名字,比如pythonlib.zip时,它就找不到Python库了。
- 问题1:为什么python26.zip这个名字有特别的魔力?Python能自动找到python26.zip里的库,但换个名字就不行了?
- 问题2:如果我把python26.zip放在和python.exe/python26.dll同一个目录下,我就不需要添加路径
sys.path.append
(指向python26.zip的路径)了,这样对吗?
Python有内置的库,而sys
就是其中之一。我原以为可以用sys.path
来指向我需要的ZIP文件里的任何Python库。但是,奇怪的是,当我用Python26.zip这个名字时,它就能正常工作。为什么会这样呢?
6 个回答
这个过程其实很简单,只需要从 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 时都这么做似乎不太聪明。可以先提取到一个临时目录,然后在卸载时再清理。
PS:我没注意到这个内容有多旧! :D
我已经使用PortablePython一年了,觉得它非常好用,因为它可以在我被限制的工作笔记本上运行。
它有Python 2.5.4、2.6.1和3.0.1这几个版本。
我查看了Python解释器的源代码,还做了一些实验。结果发现,不管怎样,Python解释器总是会在路径前面加上“PYTHONXXX.DLL所在的目录 + pythonXXX.zip”。这里的XXX是Python解释器的版本号。
因此,如果在和python26.dll同一个文件夹里有一个python26.zip文件,我就可以自动使用所有的Python库了。