python - 你如何在包含包的仓库之外构建一个轮子?
问题描述
问题
有没有办法在不同的存储库中为包构建轮子,这样轮子的构建与在包含包的存储库中构建轮子时完全一样?
例子
考虑以下回购:
/repo-containing-your-package
|___ your_module/
|___ setup.py
构建方法 A
当我python setup.py bdist_wheel
从内部运行时,repo-containing-your-package
它会按预期构建轮子,包括your_module
. 这意味着在我安装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
但是,如果我python ../repo-containing-your-package/setup.py bdist_wheel
从一个repo-containing-your-package
与your_module
. 这意味着在我安装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')
通过查看构建输出来确认模块没有与包一起正确安装的事实,其中不包括adding '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 wheel
pip
有一个wheel
从给定 arg 构建轮子的子命令;这个 arg 通常是包的名称,但也可以是包含安装脚本的目录。在这种情况下通过-e
,以便轮子具有正确的名称:
$ pip wheel -e path/to/repo
推荐阅读
- python - 更新字典中的键值
- javascript - 无法在 React 中使用 Material UI 实现表单验证
- java - 项目中启用 spring-boot-maven-plugin 的类不能导入到其他模块
- android - 使用谷歌地图时颤动应用程序崩溃
- api - 我正在尝试从 Companies House API 获取 pdf 文档
- javascript - 为什么我收到此警告 159:35 警告预计将在箭头函数数组回调返回的末尾返回一个值?
- python - 在 Pony ORM 查询中使用枚举
- snowflake-cloud-data-platform - Snowflake JDBC 驱动程序内部错误:无法检索第一个箭头块的行数:null -- 仅发生在 SELECT 语句上
- behat - 更新到 Drupal 8.9.15 时,我在 Probo 上收到以下 Behat JS 错误。不知道这意味着什么。想法?
- javascript - 使用条件更新对象中的特定值