【问题标题】:Build a wheel/egg and all dependencies for a python project为 python 项目构建一个轮子/鸡蛋和所有依赖项
【发布时间】:2014-11-21 10:31:14
【问题描述】:

为了在我们公司内进行 python 项目,我需要制作一个可安装的发行版。

这应该包括:

  • 我的项目的一个鸡蛋或 whl
  • 项目的每个依赖项的鸡蛋或 whl
  • (可选)生成一个 requirements.txt 文件,列出此版本的所有可安装组件

是否有一个简单的插件(例如 bdist_wheel 的替代品)不仅可以编译一个轮子,还可以编译该项目的组件?

显然我可以编写这个脚本,但我希望可能有一个捷径,可以用更少的步骤构建包 + 依赖项。

这需要在 Windows + Linux 上的 Python 2.7 上运行。

【问题讨论】:

    标签: python windows egg python-wheel


    【解决方案1】:

    使用poetry,您可以在项目根目录中的文件pyproject.toml 中定义有关项目的依赖项和元数据:

    [tool.poetry]
    name = "my-project"
    version = "0.1.0"
    description = "some longer description"
    authors = ["Some Author <some@author.io>"]
    
    [tool.poetry.dependencies]
    python = "*"
    
    [tool.poetry.dev-dependencies]
    pytest = "^3.4"
    

    要将您的项目构建为轮子,请执行poetry build

    $ poetry build
    
    Building my-project (0.1.0)
    - Building sdist
    - Built my-project-0.1.0.tar.gz
    
    - Building wheel
    - Built my-project-0.1.0-py3-none-any.whl
    

    为您的项目创建一个带有轮子的dist/ 文件夹。

    【讨论】:

    • 这仍然不会在创建的 Wheel 文件中添加所有指定的依赖项。安装时将下载各个依赖项。
    • @rh979 轮子并不意味着拥有所有依赖项。随后,您可以执行 pip install path/to/wheel.whl --target /path/to/some/folder 并压缩“文件夹”的内容,以将所有依赖项放在 zip 存档中,并将其发送到您要运行代码的环境。
    【解决方案2】:

    使用最新的pipwheel,您可以简单地运行

    pip wheel .
    

    在您的项目文件夹中,即使您的应用程序不在 PyPi 上。所有轮子都将存储在当前目录(.)中。

    要更改输出目录(例如,./wheels),您可以使用-w / --wheel-dir 选项:

    pip wheel . -w wheels
    

    pip documentation 列出了所有可用选项。

    【讨论】:

    • 它在 pypi 上搜索我的本地包,所以它失败了。相反,我先运行python setup.py bdist_wheel,然后对pypi 包运行pip wheel -r requirements.txt
    • 我刚试了一下,默认情况下它会将轮子文件写入您的工作目录(不是./wheelhouse)。另外,知道如何指定输出文件的名称吗?我在文档中没有看到任何内容。
    • 这给了我一百万个轮子。我如何获得一个大轮文件?
    • @rjurney Wheels 并不是所有依赖项的单一安装程序。您可以添加 --no-deps 以仅构建您的项目。其实pip wheel --no-deps -w dist .python setup.py bdist_wheel很相似。
    • @Corbie 是的,我想要一个 wagon - github.com/cloudify-cosmo/wagon - 所有轮子的 zip 文件。 Databricks 和其他系统使用这种格式来避免有一百万个轮子用于上传或集成。
    【解决方案3】:

    您需要为您的包创建一个setup.py 文件。确保您安装了最新的 setuptools 和 pip。然后运行以下命令:

    python setup.py bdist_wheel
    

    这将为您的包创建一个 Wheel 文件。这假设您没有 C/C++ 头文件、DLL 等。如果有,那么您可能还有很多工作要做。

    要获取依赖项,您需要创建一个requirements.txt 文件并运行以下命令:

    pip wheel -r requirements.txt
    

    如果您的包不在 PyPI 上,那么您必须手动将包的 wheel 文件复制到该命令创建的 wheel 文件夹中。有关更多信息,请参阅以下优秀文章:

    【讨论】:

    • 从 2014 年到 2018 年是否需要手动复制不在 PyPi 上的包的轮子?我找不到任何官方讨论
    • 您可以使用 pip 来使用轮文件的路径或 URL 而不是 PyPI 进行安装。
    • 安装依赖轮,使用命令:pip install --no-index --find-links=/local/wheels -r requirements.txt
    • 你能告诉我如何在其中包含dllexe等文件吗?谢谢!
    • 你的命令为每个 PyPi 包创建一个轮子,这不是人们想要的。
    猜你喜欢
    • 2013-12-26
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 2013-01-30
    • 2020-07-24
    • 1970-01-01
    • 2011-11-05
    相关资源
    最近更新 更多