我有一个简单的脚本,它依赖于dnspython来解析区域文件。我想将此脚本作为单个.py分发,用户只要安装了2.6 / 2.7就可以运行。我不希望用户在站点范围内安装依赖项,因为可能存在与现有软件包/版本的冲突,我也不希望它们与virtualenv混在一起。我想知道是否有办法在脚本(gzip / base64)中嵌入像dnspython这样的包,并让该脚本在运行时访问该包。也许将它解压缩到/ tmp中的目录并将其添加到sys.path?我并不担心启动开销,我只想要一个包含所有依赖项的.py w。我可以分发。
此外,没有构建C依赖项,只有纯python包。
编辑:脚本不必是.py。只要它是一个可执行文件。
答案 0 :(得分:9)
您可以将多个Python文件打包成.egg。 egg文件基本上只是具有定义良好的元数据的zip存档 - 请查看setuptools文档以了解如何执行此操作。根据{{3}},您可以通过指定入口点使egg文件直接可执行。这将为您提供一个可执行文件,其中可以包含您的代码+任何其他依赖项。
编辑:现在我建议建立一个pex来做到这一点。 pex基本上是一个带有非stdlib依赖项的可执行zip文件。它不包含python发行版(如py2app / py2exe),但包含其他所有内容,可以使用单个命令行调用构建。 docs答案 1 :(得分:3)
最简单的方法就是将名为__main__.py
的python脚本与纯粹的Python依赖项放在一个zip存档example中。
否则PyInstaller可用于生成独立的可执行文件。
答案 2 :(得分:1)
请不要这样做。如果你这样做,不要养成习惯。