我想发布一个依赖于PyPI的OpenBabel包。OpenBabel的维护人员为Python3.7上传了二进制Windows轮子,但不是后期版本的。Christoph的优秀场地包含3.8及更高版本的轮子,但它们不在PyPI上。
我希望我的软件包的用户只需要pip install my-package,并且安装了openbabel。如果在Windows上使用Python3.7,openbabel将从PyPI加载。如果他们使用新版本的Python,安装my就会失败,因为没有轮子,在Windows上从源代码安装openbabel是一件很痛苦的事。
我想将Christoph网站的预编译车轮包含在我的轮子中,并安装它们。有什么合理的办法吗?
发布于 2022-06-09 08:52:32
TL;DR:使用local path dependencies而不是正常的依赖项。
在这种情况下,您需要将的OpenBabel源代码嵌入到您自己的代码中(例如,作为子模块)。
然后,您需要在项目需求中将OpenBabel依赖关系从正常的依赖项更改为本地依赖项。
在将OpenBabel嵌入到您的项目之后,您将不需要更改OpenBabel部件,您可以在自己的代码上继续开发。
而且,每次打包项目时,您的车轮上都会有OpenBabel。
=====示例=====
例如,您的项目结构将如下所示:
YourProject
├── pyproject.toml
├── openbabel_copy
│ ├── __init__.py
│ └── ...
└── myproject
├── __init__.py
├── a.py
└── ...在您的pyproject.toml中,如果您使用的是poetry,则应该有这样的行
[tool.poetry.dependencies]
openbabel = { path = "openbabel_copy" }
scipy = "^1.6.3"
protobuf = "^3.17.1"
...这样,您就可以在myproject中使用和导入openbabel,而不会出现问题。
这叫做local path dependency。
但是,如果您正在使用其他打包工具,我不知道如何使用.(诗歌很好用,除了它缓慢的依赖解析system...but,我仍然强烈建议:)
发布于 2022-06-14 06:34:48
我的解决方案不是一个优雅的-我创建了一个新的github公共回购,并把车轮从Christoph的网站作为释放文物在该回购。然后,我为这些车轮添加了https://依赖项,而不仅仅是openbabel包。
https://stackoverflow.com/questions/72557147
复制相似问题