3

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

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

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

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

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

4

4 回答 4

2

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

如果您不想使用 setuptools 或 distutiles 路线,您可以为您的代码及其所有依赖项提供一个包含 pycs 的 zip 文件。您必须做一些工作才能使 zip 文件中的任何复杂路径可用(如果依赖项只是位于 zip 的根目录,则没有必要。然后只需将 zip 位置添加到您的路径中,它应该可以工作就像已经安装了依赖文件一样。

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

于 2013-07-19T17:51:03.590 回答
0

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

于 2013-07-19T14:48:56.603 回答
0

两种选择:

  1. 构建一个将为它们安装依赖项的包(如果唯一的依赖项是使用 pip 安装的 python 包,我不建议这样做)
  2. 使用虚拟环境。您在他们的系统上使用现有的 python,但 python 模块安装到 virtualenv 中。

或者我想你可以直接下注,并创建一个安装它们的 shell 脚本,并告诉他们在运行你的东西之前运行一次。

于 2013-07-19T14:58:46.887 回答
0

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

这是distutils的完美用例,您可以使用它为您自己的代码制作清单,链接到外部依赖项。如果您的 3rd 方模块以标准格式公开可用(它们应该是,如果不是,则很容易自己打包它们),那么这种方法的好处是允许您非常轻松地更改 3rd 的哪些版本您的代码运行的第三方库(请参阅上述链接文档的此部分)。如果您对用自己的代码打包他人的代码一无所知,您始终可以在.egg使用 distutils 创建的文件中包含所需的文件。

于 2013-07-19T14:56:36.767 回答