为 python 项目构建一个***/鸡蛋和所有依赖项

Posted

技术标签:

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

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

这应该包括:

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

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

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

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

【问题讨论】:

【参考方案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 文件夹中。有关更多信息,请参阅以下优秀文章:

http://lucumr.pocoo.org/2014/1/27/python-on-wheels/

【讨论】:

从 2014 年到 2018 年是否需要手动复制不在 PyPi 上的包的***?我找不到任何官方讨论 您可以使用 pip 来使用轮文件的路径或 URL 而不是 PyPI 进行安装。 安装依赖轮,使用命令:pip install --no-index --find-links=/local/wheels -r requirements.txt 你能告诉我如何在其中包含dllexe等文件吗?谢谢! 你的命令为每个 PyPi 包创建一个***,这不是人们想要的。

以上是关于为 python 项目构建一个***/鸡蛋和所有依赖项的主要内容,如果未能解决你的问题,请参考以下文章

我可以把鸡蛋变成***吗?

N个鸡蛋放进M个篮子(不能为空),求出满足要求的所有鸡蛋方法:(如问题补充)

使用 virtualenv 为不同的 python 版本安装带有包的鸡蛋时出错

鸡蛋里挑电路

LeetCode887 - Super Egg Drop - Hard (Python)

RuoYi(若依开源框架)-前后端分离版-前端流程简单分析