将Python程序打包成.zip文件并发布


类型:Python,创建时间:一月 1, 2012, 7:02 p.m.

标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/76/。

在部署Python程序的时候。一般是把所有的源代码复制到目标机器上。我发现一个更好的办法是把源代码打包成.zip文件,然后直接运行这个.zip文件。比如:

python besteam.zip

它的秘密是在.zip文件中包含一个__main__.py,当python运行这个zip时,会自动找到它并运行。__main__.py的内容一般是调用主脚本。一行即可,比如:

import besteam

如果不想让源代码发布出去,这更是一个好办法。不需要手动地找出编译后的python字节码文件。python提供了一个zipfile.PyZipFile的类自动地将源代码编译成字节码并打包在一起。下面是一个简单的示例脚本:

# -*- coding:utf-8 -*-
# build.py
import zipfile, os
besteamzip=zipfile.PyZipFile("besteam.zip" ,"w", zipfile.ZIP_DEFLATED)
#跳过一些开发用的.py脚本
for filename in ("__main__.py", "besteam.py"): 
    besteamzip.writepy(filename)
for dirname in os.listdir("."):
    initfile=os.path.join(dirname, "__init__.py")
    if os.path.isdir(dirname) and os.path.exists(initfile):
        besteamzip.writepy(dirname)
besteamzip.close()

需要注意的是,Python各个版本的字节码是不兼容的。所以,如果运行环境中有多个版本的Python就不能这么搞了,要么制作多个包,要么发布源代码。

标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/76/。


geek42(十月 21, 2013, 2:49 p.m.)

看了py26和py3k的cpython vm 字节码是一样的啊

老鱼(十一月 5, 2013, 10:49 a.m.)

.pyc文件的头部有个magic number,版本不一样的Python产生不同的magic number。


何不来发表一下您对本文的看法(使用Markdown语法,分段空两行):