2024-05-19 11:03:48 发布
网友
我需要创建一个虚拟的RPM,在站点包中安装一些Python模块,以解决RPM依赖性问题。在
真正的模块将使用PIP安装在Python虚拟环境中,但是为了使系统正常工作,需要在全局站点包中提供导入的模块,因此需要进行伪造。在
导入如下(示例):from pear.apple.peach import Fruit
from pear.apple.peach import Fruit
当在包含这些导入的包上执行RPM构建时,依赖关系生成失败,所以我需要在本地repo中使用RPM来假装提供这些,这样依赖关系生成就通过了。在
你在问题中提出的方法对我来说没有多大意义,要么你用python模块创建rpm包,你需要其他系统rpm包(你计划创建或安装的包),要么你只使用virtual env,然后你就不必太在意系统站点包中有什么了,只要安装了特定版本的python。虽然您可以使系统站点包在特定的virtual env中可见(例如,当您在依赖项中有lxml模块时,您可以从rpm包安装它,然后创建一个虚拟env来访问系统站点包,这样您就不需要在virtualenv中再次安装它了),在虚拟rpm包中提供特定的模块会破坏它,所以这也没有意义。在
换句话说,在virtualenv中安装一些东西,然后期望通过rpm包安装的系统python模块依赖于来自虚拟env的东西是行不通的(imho)。在
所以我建议做一个:
在您的情况下,哪种方式更有意义很大程度上取决于您要做什么(您计划如何维护python模块,您计划安装多少台计算机,如果您计划自己安装它,或者提供给其他人自己安装,等等……)。在
我可以用一个空文件复制每个导入,并在每个文件夹级别使用空的__init__.py文件来解决这个问题。在
__init__.py
例如,要解析from pear.apple.peach import Fruit,我需要在站点包中安装以下文件树:
-> pear -> __init__.py -> apple -> peach.py
虚拟rpm的规范文件的相关行:
__init__.py和{}存储在用于构建RPM的FruitDummy.tar.gz中。在
FruitDummy.tar.gz
你在问题中提出的方法对我来说没有多大意义,要么你用python模块创建rpm包,你需要其他系统rpm包(你计划创建或安装的包),要么你只使用virtual env,然后你就不必太在意系统站点包中有什么了,只要安装了特定版本的python。虽然您可以使系统站点包在特定的virtual env中可见(例如,当您在依赖项中有lxml模块时,您可以从rpm包安装它,然后创建一个虚拟env来访问系统站点包,这样您就不需要在virtualenv中再次安装它了),在虚拟rpm包中提供特定的模块会破坏它,所以这也没有意义。在
换句话说,在virtualenv中安装一些东西,然后期望通过rpm包安装的系统python模块依赖于来自虚拟env的东西是行不通的(imho)。在
所以我建议做一个:
在您的情况下,哪种方式更有意义很大程度上取决于您要做什么(您计划如何维护python模块,您计划安装多少台计算机,如果您计划自己安装它,或者提供给其他人自己安装,等等……)。在
我可以用一个空文件复制每个导入,并在每个文件夹级别使用空的
__init__.py
文件来解决这个问题。在例如,要解析
from pear.apple.peach import Fruit
,我需要在站点包中安装以下文件树:虚拟rpm的规范文件的相关行:
^{pr2}$__init__.py
和{FruitDummy.tar.gz
中。在相关问题 更多 >
编程相关推荐