【发布时间】:2012-07-11 16:05:25
【问题描述】:
我有一个简单的脚本,它依赖于dnspython 来解析区域文件。我想将此脚本作为单个 .py 分发,用户只要安装了 2.6/2.7 就可以运行该脚本。我不想让用户在站点范围内安装依赖项,因为可能与现有的包/版本发生冲突,我也不希望他们与 virtualenv 混在一起。我想知道是否有办法在脚本(gzip/base64)中嵌入像 dnspython 这样的包,并让该脚本在运行时访问该包。也许将其解压缩到 /tmp 中的目录并将其添加到 sys.path?我不关心启动开销,我只想要一个包含所有依赖项的单个 .py,我可以分发它。
此外,没有 C 依赖项要构建,只有纯 python 包。
编辑:脚本不必是 .py。只要它是单个可执行文件即可。
【问题讨论】:
-
如果您可以放宽一个文件的限制,您可以将 dnspython 库与您的 .py 文件一起打包,作为 zip 文件或作为常规独立文件 - 这将解决依赖问题.你坚持只有 1 个文件吗?
-
通向许可证地狱的道路是用嵌入铺就的......
-
@MahmoudAbdelkader 我想这会奏效。 Python 会先在当前目录中查找包,然后再查找其他位置(尽管我认为此顺序在 3 中发生了变化)。仍然希望有一种方法可以将所有依赖项打包为一个可执行文件,用户可以运行并且没有任何问题。我想它不一定是.py。
-
有像
py2exe和freeze这样的东西是专门为了分发一个可执行文件而发明的。不过,这些是特定于平台的。
标签: python