我需要創建一個虛擬RPM,它似乎在站點包中安裝了一些Python模塊來解決RPM依賴性問題。如何創建假裝提供Python模塊的假RPM?
真實模塊將在Python虛擬環境中使用PIP進行安裝,但爲了使系統工作,導入的模塊需要在全局站點包中提供,因此需要僞裝。
進口如下所示(舉例):from pear.apple.peach import Fruit
當對具有這些進口它依存產生失敗包的RPM構建,所以我需要在本地回購的RPM假裝提供這些所以依賴生成通過。
我需要創建一個虛擬RPM,它似乎在站點包中安裝了一些Python模塊來解決RPM依賴性問題。如何創建假裝提供Python模塊的假RPM?
真實模塊將在Python虛擬環境中使用PIP進行安裝,但爲了使系統工作,導入的模塊需要在全局站點包中提供,因此需要僞裝。
進口如下所示(舉例):from pear.apple.peach import Fruit
當對具有這些進口它依存產生失敗包的RPM構建,所以我需要在本地回購的RPM假裝提供這些所以依賴生成通過。
我能夠通過將每個導入複製爲空文件並在每個文件夾級別使用空文件來解決此問題。
例如,爲了解決from pear.apple.peach import Fruit
,我會需要安裝以下文件樹中的站點包:
-> pear
-> __init__.py
-> apple
-> peach.py
規範文件的相關線路的虛擬轉速:
...
source:FruitDummy.tar.gz
...
% install
mkdir -p $RPM_BUILD_ROOT%{python_sitelib}/pear/apple/
install __init__.py $RPM_BUILD_ROOT%{python_sitelib}/pear/
install peach.py $RPM_BUILD_ROOT%{python_sitelib}/pear/apple/
...
%files
%defattr(-,root,root,-)
%{python_sitelib}/pear/__init__.py*
%{python_sitelib}/pear/apple/peach.py*
...
__init__.py
和peach.py
被存儲在用於構建RPM的FruitDummy.tar.gz
中。
你在這個問題中提出的方法對我來說沒有多大意義,要麼使用其他系統rpm軟件包(您打算創建或安裝的軟件包)所需的python模塊創建rpm軟件包,要麼只使用虛擬env,那麼只要你安裝了特定版本的python,你就不需要關心你在系統站點包裏有什麼。雖然可以使系統站點程序包在特定的虛擬env中可見(例如,如果在依賴項中有lxml模塊,則可以從rpm包安裝它,然後使虛擬env可以訪問系統站點程序包,以便您不需要需要在virtualenv中再次安裝它),在虛擬rpm包中提供的特定模塊會破壞它,所以這也沒有意義。
換句話說,在虛擬環境中安裝了某些東西,然後希望通過rpm包安裝系統python模塊來依賴於該虛擬環境的某些內容不會起作用(imho)。
因此,我建議做一:
哪種方式更有意義在你的情況下在很大程度上取決於你有什麼做的(你怎麼打算維持Python模塊,在你打算多少臺機器安裝它,如果你打算自己安裝或者提供給其他人自行安裝,等等......)。
我正在構建系統中自動生成所有Python文件的依賴關係,如果依賴項無法通過項目中的(1)其他源包或(2)從本地預構建RPM緩存。我的問題所依據的約束條件並不常見,但它是我所面對的。 –