【问题标题】:Packaging single Python module with dependencies使用依赖项打包单个 Python 模块
【发布时间】:2013-09-15 20:28:58
【问题描述】:

我有一个 Python3 .py 模块,其中包含一些依赖项(锁定文件、python-daemon)。是否有一种简单的方法可以将其与其依赖项打包,以便用户无需下载和安装其他模块?我正在尝试执行所有包含的安装。

我尝试查看 setuptools、distribute 和 distutils,结果比开始时更加困惑。

【问题讨论】:

标签: python python-3.x packaging setuptools distribute


【解决方案1】:

我看到经常使用的最简单的方法是将所有依赖项放在一个文件中(通常命名为requirements.txt),然后要求用户运行以下命令:

pip install -r requirements.txt

以下是文件内容的示例 (https://github.com/cenkalti/pypi-notifier/blob/master/requirements.txt):

Flask==0.10.1
Flask-Cache==0.12
Flask-SQLAlchemy==1.0
Flask-Script==0.5.3
GitHub-Flask==0.3.4
Jinja2==2.7
MarkupSafe==0.18
SQLAlchemy==0.8.2
...

【讨论】:

    【解决方案2】:

    cx_Freeze 应该可以满足您的需求。

    【讨论】:

      【解决方案3】:

      您可以使用包含所有文件的 .zip 文件之类的简单文件轻松完成此操作;只要所有文件都导出到同一个目录,那么它们应该都可以工作!缺点是模块有很多依赖项,即它们有额外的文件夹,你需要找到。

      我还认为相当多的人/公司编写自己的打包系统,以便所有模块都在 1 个 .py 文件中,该文件在控制台中打开并将所有内容导出到正确的位置。不过,这将需要大量的工作,因此您可以尝试找到一个预建的。我已经采用了这种方法,但它并没有证明太费力,我不得不解压缩带有文件的 .zips...

      作为另一种解决方案,您可以尝试 PyExe(我认为它被称为)将所有内容导出到单个 .exe 文件(但仅限 Windows)

      我个人没有使用过 setuptools、distribute 或 distutils,所以很遗憾无法评论这些。

      要记住的另一件事是每个模块的许可证,有些可能不允许重新分发,因此请先检查!

      【讨论】:

        【解决方案4】:

        py2exe 很好,但会限制您使用 Windows。

        在不限制受众并遵循公认的最佳做法的情况下执行此操作的最佳方法是创建一个requirements.txtsetup.py 文件,然后将您的项目上传到github。请参阅https://github.com/sourcegraph/python-deps 作为参考。 requirements.txt 以简单易读的格式列出了依赖项,您可以使用 setup.py 中的 scriptspy_modules 选项指定项目安装的命令和库模块。

        假设您的 git 存储库位于 github.com/foo/bar,那么您的用户可以执行 pip install git+https://github.com/foo/bar

        【讨论】:

        • 他的依赖项(python-daemon)暗示这可能会作为守护进程运行,因此可能在 Linux/Unix 机器上运行。 py2exe,顾名思义,适用于 Windows。
        【解决方案5】:

        Read official Python packaging tutorial.

        • 您使用 setup.py 从模块创建 Python 包

        • setup.py 中,您可以声明必须安装哪些其他 Python 包作为依赖项

        • 此外,您可以使用 requirements.txt 缩小应用程序特定的依赖版本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-23
          • 2013-04-17
          • 2020-04-18
          • 2013-07-03
          • 2010-09-14
          相关资源
          最近更新 更多