为python项目构建一个wheel/egg和所有依赖项

Sal*_*ley 37 python windows egg python-wheel

为了在我们的公司内部分python项目,我需要进行可安装的分发.

这应该包括:

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

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

显然我可以编写脚本,但我希望可能有一个快捷方式,可以用更少的步骤构建软件包+依赖项.

这需要在Windows + Linux上使用Python 2.7.

Mik*_*oll 42

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

python setup.py bdist_wheel
Run Code Online (Sandbox Code Playgroud)

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

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

pip wheel -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

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

  • 您的命令为每个 PyPi 包创建一个轮子,这不是人们想要的。 (3认同)
  • 要安装依赖轮,请使用命令:`pip install --no-index --find-links=/local/wheels -r requirements.txt` (2认同)

jtp*_*yda 29

凭借最新的pipwheel,你可以简单地运行

pip wheel .
Run Code Online (Sandbox Code Playgroud)

在您的项目文件夹中,即使您的应用程序不在PyPi上.所有车轮都将存放在./wheelhouse.但是,当我尝试它时,它错过了我的一个依赖项,我需要手动构建它.不知道为什么.

  • @rjurney Wheels 并不意味着成为所有依赖项的单一安装程序。您可以添加“--no-deps”来仅构建您的项目。实际上 `pipwheel --no-deps -w dist.` 与 `python setup.py bdist_wheel` 非常相似。 (4认同)
  • 这给了我一百万个轮子。如何获得一份大轮文件? (3认同)
  • @Corbie 是的,我想要一辆“旅行车” - https://github.com/cloudify-cosmo/wagon - 所有轮子的 zip 文件。Databricks 和其他系统使用这种格式来避免有一百万个轮子用于上传或集成。 (3认同)
  • 它在 pypi 上搜索我的本地包,因此失败。相反,我首先运行 `python setup.py bdist_wheel`,然后为 pypi 包运行 `pip wheel -r requirements.txt`。 (2认同)
  • 我刚刚尝试过,它默认将车轮文件写入您的工作目录(不是 ./wheelhouse)。另外,知道如何指定输出文件的名称吗?我在文档中没有看到任何内容。 (2认同)

Vin*_*aes 6

使用诗歌,您可以在项目根目录的文件中定义有关项目的依赖项和元数据,称为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"
Run Code Online (Sandbox Code Playgroud)

要将项目构建为轮子,请执行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
Run Code Online (Sandbox Code Playgroud)

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

  • 这仍然不会在创建的wheel文件中添加所有指定的依赖项。安装时将下载各个依赖项。 (12认同)
  • @rh979 轮子并不意味着具有所有依赖性。随后,您可以执行 `pip install path/to/wheel.whl --target /path/to/some/folder` 并压缩“文件夹”的内容,以将所有依赖项包含在 zip 存档中并将其发送到环境中您想要运行代码的地方。 (3认同)