3

私はPythonパッケージのビルドアウトを使用しようとしています。これは、使用されると、 dbus-pythonpygobjectの2つの拡張モジュールに依存します。どちらのモジュールもビルドアウトを失敗させます。dbus-pythonにはファイルがありませんが、setup.pyファイルはありますpygobjectが、その使用は推奨されていません。代わりに、configure、make、makeinstallを使用する必要があります。そのため、ビルドアウトでは、開発環境でこれらの依存関係を設定できません。

これが私のbuildout.cfg

[buildout]
develop = .
parts = eggs

[python]
recipe = zc.recipe.eggs
interpreter = python
eggs = foobar

パッケージsetup.pyの場所:foobar

install_requires=['dbus-python', 'pygobject'],

解決策を探しているときに、システム全体にインストールされた卵を利用するz3c.recipe.scriptsレシピとその機能に出くわしました。しかし、私の..に適用するとbuildout.cfg

[python]
recipe = z3c.recipe.scripts
include-site-packages = true
allowed-eggs-from-site-packages = pygobject, dbus-python
interpreter = python
eggs = foobar    

..両方のパッケージ( dbusgobject)が私のシステムPythonにインストールされていますが、効果がないように見えます(まだ失敗します) 。行を削除しても同じことが言えますallowed-eggs..

私の質問:ここで概念レベルで何か問題がありましたか、それともエラーがありますbuildout.cfgか?

configure、make、zc.recipe.cmmi makeinstallを使用して卵をインストールするレシピがあることを知っています。ただし、私の場合は、システムのPythonの卵を参照するだけで十分です。ビルドアウトによって生成された100%再現可能な環境は必要ありません。また、dbus-pythonpygobjectは、使用が意図されている環境であるほとんどのLinuxデスクトップシステムにデフォルトでインストールされます。foobar

4

4 に答える 4

3

システムパッケージで動作する最新の1.5.xビルドアウトも入手していません。1つの方法があります:バージョンを固定します。そうすれば、zc.buildout1.5.xがそれを取得します。

[buildout]
...
versions = versions

[versions]
pygobject = 1.2.3

または、古い1.4.4ビルドアウト(そのために特別なbootstrap.pyが必要です。グーグルで検索してください)をosc.recipe.syseggと組み合わせて使用​​できます。

[buildout]
...
parts = 
    ...
    sysegg

[sysegg]
recipe = osc.recipe.sysegg
force-sysegg = true 
eggs =
    dbus-python
    pygobject

信頼できるので、私は個人的にosc.recipe.syseggソリューションを選びます。

于 2011-08-29T20:49:18.910 に答える
2

動作が悪いPythonディストリビューションのそれぞれにCMMIパーツを使用し、パーツのextra-pathsオプションを使用pythonして、CMMIパーツがPythonパスに含まれていることを確認することをお勧めします。

于 2011-08-29T20:56:21.300 に答える
2

@Rainoutの回答とコメントのおかげで、問題の実際の原因を見つけました。問題はビルドアウトや私の構成ではなく、DBusとGobjectのPythonバインディングにあります。これらのパッケージはeggとしてではなく、プレーンパッケージとして配布されます。

したがって、これらのパッケージはPyPIを介して取得できますが、Pythonパッケージがeggsとして出荷されることを期待するインフラストラクチャでは使用できません。実際には、これは、これらのパッケージへの依存関係をリストする必要はありませんがsetup.py、他の方法で処理する必要があることを意味します(あるとしても)。

于 2011-08-30T14:59:40.877 に答える
0

これを行うための最良の方法は、include-site-packagesをtrueに設定してから、mockedeggsレシピを使用して、setuptoolsをだましてインストール中に卵が利用可能であると思わせることです。唯一の欠点は、サイトパッケージから何を使用するかをあまり制御できないことです。許可されたeggs-from-site-packagesを空白に設定して、eggの使用を停止できますが、すべてのパッケージが使用可能になります。とにかく、これが私のビルドアウトからの抜粋です:

[buildout]
parts =
    mockedeggs
    myapp

include-site-packages = true
allowed-eggs-from-site-packages =

[myapp]
recipe = z3c.recipe.scripts
eggs = ${buildout:eggs}

[mockedeggs]
recipe = collective.recipe.mockedeggs
mocked-eggs =
    mapnik2 = 2.0
于 2012-08-24T02:36:07.227 に答える