【问题标题】:Python compile all modules into a single python filePython将所有模块编译成一个python文件
【发布时间】:2013-07-20 01:51:03
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我只说 .pyc 因为这是我所知道的,但也许还有其他选择?不使用 cx_freeze 之类的东西。基本上只需要整个 python 程序和一个文件中的依赖项。 (如果可能的话?)
      • 只要有足够的人力,一切皆有可能。例如,您可以将脚本编译成独立的可执行文件。
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        两种选择:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-07
          • 2019-06-30
          • 2014-10-17
          • 2014-02-11
          • 2017-12-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多