Python 如何在包含该包的回购协议之外构建一个轮子? 问题:
是否有一种方法可以在不同的存储库中为包构建控制盘,从而使控制盘的构建与在包含包的存储库中构建控制盘时完全相同 例子 考虑以下回购协议:Python 如何在包含该包的回购协议之外构建一个轮子? 问题:,python,pip,python-wheel,Python,Pip,Python Wheel,是否有一种方法可以在不同的存储库中为包构建控制盘,从而使控制盘的构建与在包含包的存储库中构建控制盘时完全相同 例子 考虑以下回购协议: /repo-containing-your-package |___ your_module/ |___ setup.py 构建方法A 当我从包含包的repo中运行python setup.py bdist_wheel时,它会按预期构建控制盘,包括您的_模块。这意味着在我安装pip install./dist/your_module-#
/repo-containing-your-package
|___ your_module/
|___ setup.py
构建方法A
当我从包含包的repo中运行python setup.py bdist_wheel
时,它会按预期构建控制盘,包括您的_模块
。这意味着在我安装pip install./dist/your_module-#.#.#-py3 none any.whl
(成功)之后,我可以从命令行运行python-m your_module.foo
当软件包生成时,我会得到验证我的模块是否已被控制盘拾取的输出:
creating 'dist/your_module-#.#.#-py3-none-any.whl' and adding 'build/bar' to it
adding 'your_module/__init__.py'
etc...
构建方法B
但是,如果我从包含包的repo
的同级存储库中运行包含包的python../repo/setup.py bdist_wheel
,它不会按照预期构建控制盘,因为它无法包含您的_模块。这意味着在我安装pip install./dist/your_module-#.#.#-py3 none any.whl
(成功)后,尝试python-m your_module.foo
失败:
Error while finding module specification for 'your_module.foo' (ModuleNotFoundError: No module named 'your_module')
模块未与软件包一起正确安装的事实通过查看构建输出得到确认,该输出不包括方法A包含的添加“您的模块”的输出。我知道的两种解决方案:
在setup.py中更改工作目录
如果可以修改安装脚本,则可以通过编程方式更改工作目录。在安装脚本中尽早添加os.chdir
调用:
import os
from setuptools import setup
os.chdir(os.path.dirname(__file__))
setup(...)
您也可以通过其他方式更改工作目录,而无需修改安装脚本,例如在bash
:
$ pushd path/to/repo; python setup.py bdist_wheel; popd
使用pip轮
pip
有一个子命令wheel
,它从给定的arg构建一个wheel;此参数通常是包的名称,但可以是包含安装脚本的目录。在这种情况下,通过-e
,使车轮具有正确的名称:
$ pip wheel -e path/to/repo
我只尝试了第二种建议的方法,但只做了一些轻微的修改,效果完全符合我的要求:pip wheel-e../repo包含您的包-w dist--no deps
。谢谢很乐意帮忙!:-)