Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在包含该包的回购协议之外构建一个轮子? 问题:_Python_Pip_Python Wheel - Fatal编程技术网

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
。谢谢很乐意帮忙!:-)