当前位置: 首页 > 知识库问答 >
问题:

是否可以将一个轮子嵌入另一个蟒蛇轮中

燕靖
2023-03-14

我想发布一个依赖于OpenBabel的PyPI包。OpenBabel的维护者为Python 3.7上传了二进制Windows轮子,但没有为Pythin的更高版本上传。Christoph Gohlke的优秀站点包含3.8及以上版本的轮子,但它们不在PyPI上。

我希望我的软件包的用户只需< code > pip install my-package 并安装openbabel。如果他们在Windows上使用Python 3.7,openbabel会从PyPI加载。如果他们使用新版本的Python,安装我的包会失败,因为没有轮子,在Windows上从源代码安装openbabel真的很痛苦。

我想把Christoph Gohlke网站上的预html" target="_blank">编译轮子包含在我的轮子中,并安装它们。有什么合理的办法吗?

共有2个答案

杜鸿彩
2023-03-14

我的解决方案并不优雅 - 我创建了一个新的github公共存储库,并将Christoph Gohlke网站的轮子作为该存储库中的发布工件放置。然后,我为这些轮子添加了一个 https:// 依赖项,而不仅仅是 openbabel 包。

姜钧
2023-03-14

TL;DR:使用< code >本地路径依赖项而不是普通依赖项。

在这种情况下,您需要将OpenBabel的源代码嵌入到您自己的代码中(例如,作为子模块)。

然后,您需要将OpenBabel依赖项从正常更改为项目需求中的本地依赖项。

在将OpenBabel嵌入到您的项目中之后,您不需要更改OpenBabel部分,并且您可以继续开发您自己的代码。

每次你打包你的项目时,你的轮子里都会有一个打开的巴别塔。

====示例=====

例如,您的项目结构如下所示:

YourProject
├── pyproject.toml
├── openbabel_copy
│   ├── __init__.py
│   └── ...
└── myproject
    ├── __init__.py
    ├── a.py
    └── ...

在您的< code>pyproject.toml中,如果您使用的是< code >诗歌,您将会看到这样的行:

[tool.poetry.dependencies]
openbabel = { path = "openbabel_copy" }
scipy = "^1.6.3"
protobuf = "^3.17.1"
...

这样您就可以毫无问题地在myproject中使用和导入openbabel。

这称为本地路径依赖

然而,如果您正在使用其他打包工具,我不知道如何做到这一点……(Poetry很好用,除了它的慢依赖解析系统……但我仍然强烈建议:)

 类似资料:
  • 我正试图用python做一个掷骰子程序,给定用户在边、骰子和掷骰子上的输入来掷骰子。目前这段代码或多或少是有效的,但是我遇到的问题是,假设我让< code>3个骰子滚动< code>3次,骰子有< code>6个面。 我的代码显示如下: 当我需要它显示为: 这是我目前为止的代码。我的猜测是,它与我的参数和参数为空有关?我不完全确定。以下是我的代码:

  • 我有一个散列表 这是我的代码 我应该对我的代码做什么样的修改来确保它能按照我的要求编译和运行?

  • 假设我有以下两本词典: 我想检查dict1是否是dict2的子集(即dict 1中的键值对是否显示在dict2中,而dict2中的相同键值将包括额外的值,如充电状态和设备)。 但我知道 请注意,这是一个不同的问题: 遍历所有嵌套字典值? 对嵌套字典的嵌套值求和 循环访问嵌套字典 有人能帮忙吗? 提前致谢。

  • 假设我有一些资源,我想在用python编写的aws lambda中的不同请求之间共享。我应该如何实现这一点? 是否有“启动后”挂钩,或者我应该在第一次调用时惰性地创建资源?“延迟初始化”的缺点是,它意味着一些请求会随机变慢,因为您选择了一个消费者来承担启动成本。 此外…这些资源会在lambda可执行文件被“冻结”后幸存下来吗? 本页https://docs.aws.amazon.com/lambd

  • 基于Angular 2的文档,您可以使用@Input轻松地将数据从一个组件传递到另一个组件。 例如,我可以这样设置父对象: 然后按如下方式获取子组件中的数据: 很明显,将传递给父组件的模板(当然是在子选择器中),并将它们处理到子组件中。 但问题是。 我的子组件DOM元素(在本例中

  • 问题内容: 是否可以在另一个CSS文件中包含一个CSS文件? 问题答案: 是: 注意: 该规则必须先于所有其他规则(除外)。 其他语句需要其他服务器请求。或者,将所有CSS连接到一个文件中,以避免多个HTTP请求。例如,复制的内容和入和仅供参考。