为 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】:
使用最新的pip
和wheel
,您可以简单地运行
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
你能告诉我如何在其中包含dll
、exe
等文件吗?谢谢!
你的命令为每个 PyPi 包创建一个***,这不是人们想要的。以上是关于为 python 项目构建一个***/鸡蛋和所有依赖项的主要内容,如果未能解决你的问题,请参考以下文章
N个鸡蛋放进M个篮子(不能为空),求出满足要求的所有鸡蛋方法:(如问题补充)
使用 virtualenv 为不同的 python 版本安装带有包的鸡蛋时出错