2017-07-26 4 views
1

RPMの依存関係の問題を解決するために、いくつかのPythonモジュールをサイトパッケージにインストールするように見えるダミーRPMを作成する必要があります。Pythonモジュールを提供するふりをするダミーRPMを作成するにはどうすればいいですか?

実際のモジュールは、Python仮想環境内でPIPを使用してインストールされますが、システムが動作するためには、インポートされたモジュールをグローバルサイトパッケージに提供する必要があります。

次のように輸入(例)を見て:from pear.apple.peach import Fruit

それが依存関係の生成に失敗したこれらの輸入を持っているパッケージのRPMのビルドを実行するので、私はこれらを提供するふりをする地元のレポでRPMを必要とします依存関係の生成は成功します。

答えて

0

すべてのインポートを空のファイルで複製し、すべてのフォルダレベルで空の__init__.pyファイルを使用することで、この問題を解決できました。

例えば、from pear.apple.peach import Fruitを解決するために、私はサイトのパッケージに、以下のファイルツリーをインストールするのに必要でしょう:ダミーrpmのためのspecファイルの

-> 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に保存した。

1

質問に提案しているアプローチはあまり意味がありません。他のシステムrpmパッケージ(作成またはインストールするパッケージ)に必要なPythonモジュールを使用してrpmパッケージを作成するか、 envを使用すると、Python自体の特定のバージョンがインストールされている限り、システムサイトのパッケージに何を持っているかを気にする必要はありません。特定の仮想envでシステムサイトパッケージを表示できるようにすることができます(たとえば、lxmlモジュールが依存関係の中にある場合、rpmパッケージからインストールしてから、仮想envでシステムサイトパッケージにアクセスできるようにしますvirtualenvに再度インストールする必要があります)、ダミーのRPMパッケージで提供されている特定のモジュールを使用すると、これが壊れてしまい、これも意味をなさないでしょう。

つまり、何かを仮想envにインストールして、その仮想envの何かに依存するrpm pythonモジュールをインストールすることを期待しています(imho)。

  • あなたが動作する他のパッケージのためにインストールする必要があり、モジュールのRPMパッケージをビルドします。

    は、だから私は、のいずれかが行うことをお勧めします。あなたがrpmbuildでいくつかの経験をしている限り、それは難しくないはずです、pyp2rpmツールを使用してビットを微調整する必要がある初期specfileを作成することができます。しかし、これはビルドする必要があるパッケージの数と、それらを更新する予定の頻度(スペックファイルを更新して再構築することを意味する)にも依存します。

  • システム・サイト・パッケージにアクセスできるかどうかにかかわらず、仮想envのみを使用してください。この方法では、依存関係とアプリケーションの両方を仮想envにインストールし、rpmパッケージを扱う必要はありません(rpmパッケージからpythonとvirtualenvをインストールする限り)。

どのような場合には、あなたが何をしようとしているかに大きく依存します(どのようにPythonモジュールをインストールする予定ですか?自分でインストールするか、他の人にそれをインストールして自分自身をインストールするなど)。

+0

私はすべてのPythonファイルの依存関係を自動的に生成するビルドシステムで作業しています。プロジェクトの(1)他のソースパッケージからのRPM、または(2)ローカルビルドからの依存関係が満たされないと失敗します。 RPMキャッシュ。私の質問が基づいている制約は普通のものではありませんが、それは私が直面しているものです。 –

関連する問題