Python将所有模块编译成单个python文件

时间:2013-07-19 14:46:43

标签: python

我在python中编写一个程序,发送给运行相同python版本的其他人,但是这些需要安装的第三方模块才能使用它。

有没有办法编译成.pyc(我只说pyc,因为它是一个python编译文件),里面还有所有依赖模块?

那么他们可以运行程序而无需单独安装模块吗?

编辑: 对不起,如果它不清楚,但我知道诸如cx_freeze之类的东西,但我尝试的只是一个python文件。

所以他们可以输入“python myapp.py”然后就会运行。没有任何安装。好像所有模块代码都在我的.py文件中。

4 个答案:

答案 0 :(得分:1)

如果您使用 python 2.3或更高版本,并且您的依赖项是纯python

如果您不想使用setuptools或distutiles路由,则可以为您的代码及其所有依赖项提供带有pyc的zip文件。您将不得不执行a little work to make any complex pathing inside the zip file available(如果依赖项只是位于zip的根目录,则这不是必需的。然后只需将zip位置添加到您的路径中,它应该像依赖项文件一样工作安装。

如果您的依赖项包含.pyds或其他二进制依赖项,您可能不得不依赖于distutils。

答案 1 :(得分:0)

您可以简单地为所需的库包含.pyc文件,但是没有 - .pyc不能用作多个文件的容器(除非您将所有源收集到一个.py文件中然后进行编译)。

答案 2 :(得分:0)

听起来你所追求的是最终用户运行一个命令的能力,例如: install my_custom_package_and_all_required_dependencies,让它组装所需的一切。

这是distutils的完美用例,您可以使用该用例为自己的代码制作清单,以便链接到外部依赖项。如果您的第三方模块以标准格式公开提供(它们应该是,如果它们不是,那么自己打包很容易),那么这种方法的好处是可以让您轻松更改第3版的您的代码运行的派对库(请参阅上述链接文档的this section)。如果你已经开始使用自己的代码打包别人的代码了,你可以随时在使用distutils创建的.egg中包含所需的文件。

答案 3 :(得分:0)

两个选项:

  1. 构建一个将为它们安装依赖项的软件包(如果唯一依赖项是使用pip安装的python软件包,我不建议这样做)
  2. 使用virtual environments。你在他们的系统上使用现有的python,但是在virtualenv中安装了python模块。
  3. 或者我想你可以直接打算,并创建一个安装它们的shell脚本,并告诉他们在运行你的东西之前运行它一次。