【问题标题】:How to install a wheel-style package using setup.py如何使用 setup.py 安装轮式包
【发布时间】:2018-07-11 01:23:12
【问题描述】:

有没有办法使用setup.py 将python 包安装为wheel/pip 样式的包(即dist-info),而不是setup.py 默认执行的egg 安装(即egg-info) ?

例如,如果我有一个带有setup.py 脚本的python 包,并且我运行以下命令,它将将该包安装为一个鸡蛋。

> python setup.py install

但是,我可以先构建一个轮子,然后使用 pip 将该轮子安装为轮子/dist-info 类型的安装

> python setup.py bdist_wheel
> pip install ./dist/package-0.1-py2-none-any.whl

有没有办法直接从setup.py 将软件包安装为 wheel/dist-info 安装?或者是否需要同时使用setuptoolspip 的两步过程?

【问题讨论】:

  • pip install dir/ 其中dir 包含setup.py?
  • @hoefling pip 将从包含setup.py 的目录安装,但它只是调用setup.py install,因此它会生成相同的 egg 安装。
  • 这不是真的。试一试,你会发现当从目录安装时,pip 会运行bdist_wheel 命令,然后从构建的 wheel 文件中安装包。至少这是我在当前pip 9.0.1 中观察到的行为。
  • @hoefling 是的,我试过了。 pip 绝对会创建一个鸡蛋并安装它。我不相信pip 会安装 from 一个 egg 二进制分发文件,因为 egg 格式不包含足够的元数据来了解该特定 bdist 是否适用于该特定 python 安装。这是创建车轮格式的部分原因。
  • @hoefling 嗯...我也有一个pip 9.0.1,它对我来说表现不同。如果这很重要,我在窗户上。

标签: python pip setuptools python-wheel python-packaging


【解决方案1】:

对我来说,建议的解决方案仍然不起作用(即使使用 pip 21.0.1),并且由于版本控制 (package-name-XX.YY),我也不知道 .whl 文件的名称。您可以告诉 pip 查看目录并从那里获取.whl

python setup.py bdist_wheel
pip install package-name --find-links dist/

【讨论】:

  • 如果您有最新版本的pip,您现在应该可以直接使用pip install .,而无需先创建.whl。
  • 我试过了,我确实检查了我有最新版本的 pip...它与已经存在的命名空间包发生冲突,不确定是否是这个原因。
【解决方案2】:

更新: 确认,这已登陆 pip。如果您在从目录安装 pip 时仍然看到 .egg-info 安装,那么只需升级您的 pip 安装。请注意, --editable 安装仍将使用 egg-info。


原答案如下:

此功能即将推出。这是issue #4611。沿着这条路走,你会发现PR 4764 要 pip,大约一周前合并到 master 中。同时,您可以

pip wheel . 
pip install ./mypackage.whl

【讨论】:

  • 嗯,让我看看我能找到什么。请问您为什么关心哪种类型的安装?
  • 我更喜欢轮式安装使用的扁平安装,它们是最受欢迎的安装方法,因为鸡蛋已被弃用。我知道我可以修改 setup.py 脚本以使用 zip_safe=False 来获得平面结构,但我宁愿不必为真正的本地安装配置选项修改包文件。
  • 我有同样的问题,pip 21.0.1,它不适用于命名空间包。仅当我执行这两个步骤时。
猜你喜欢
  • 2017-05-03
  • 1970-01-01
  • 2017-07-05
  • 2012-07-28
  • 1970-01-01
  • 2019-07-01
  • 2019-05-09
  • 1970-01-01
  • 2017-05-10
相关资源
最近更新 更多