4

ディレクトリで、zc.buildoutを使用して生成されたスクリプトは次のようになります。zc.recipe.egg<package>/bin/

#! <python shebang> -S

import sys
sys.path[0:0] = [
    ... # some paths derived from the eggs
    ... # some other paths included with zc.recipe.egg `extra-path`
]

# some user initialization code from zc.recipe.egg `initialization`

# import function, call function

私ができなかったのは、すべてのスクリプトで導入された構造にプログラム でパスを追加する方法を見つけることでした。sys.pathこれは可能ですか?

理由:Pythonプロジェクトのバージョンをグローバルにインストールし、別のバージョンをローカルにインストールしています(ビルドアウトツリー外)。これら2つのバージョンを切り替えられるようにしたいと思います。

注:明らかに、zc.recipe.egg/initializationプロパティを使用して次のようなものを追加できます。

initialization = sys.path[0:0] = [ /add/path/to/my/eggs ]

しかし、他の方法はありますか?例のための追加ポイント!

4

2 に答える 2

1

最後に、 https://github.com/idiap/local.bob.recipeにある独自のビルドアウトレシピを作成して、作業環境を取得しました。レシピを含むファイルは次のとおりです:https ://github.com/idiap/local.bob.recipe/blob/master/config.py 。クラスコンストラクターのソフトウェアに固有のチェックがたくさんあり、いくつかの追加の改善もありますが、気にしないでください。「本物の肉(TM)」はinstall()そのクラスのメソッドにあります。それは多かれ少なかれこのようになります:

egg_link = os.path.join(self.buildout['buildout']['eggs-directory'], 'external-package.egg-link')
f = open(egg_link, 'wt')
f.write(self.options['install-directory'] + '\n')
f.close()
self.options.created(egg_link)
return self.options.created()

これでうまくいきます。私の外部(CMakeベース)パッケージは、.egg-infoビルドするpythonパッケージと並行して適切なファイルを作成するだけで済みます。それよりも、上記のレシピを使用して、次のような特定のパッケージインストールの使用法を結び付けることができます。

[buildout]
parts = external_package python
develop = .
eggs = my_project
       external_package
       recipe.as.above

[external_package]
recipe = recipe.as.above:config
install-directory = ../path/to/my/local/package/build

[python]
recipe = zc.recipe.egg
interpreter = python
eggs = ${buildout:eggs}

インストールを切り替える場合は、install-directory上記のプロパティを変更するだけです。システム全体で利用可能なデフォルトのインストールを使用する場合は、ファイルrecipe.as.aboveから構造を完全に削除してください。buildout.cfgBuildoutは、追加の構成を必要とせずにグローバルインストールを見つけるだけです。アンインストールも正しく機能します。したがって、ビルドを切り替えるだけでうまくいきます。

ここで使用する完全に機能するビルドアウト.cfgファイルは次のとおりです:https ://github.com/idiap/bob.project.example/blob/master/localbob.cfg

問題は、この外部レシピがなくても同じことを達成するためのより簡単な方法はありますか?

于 2012-04-18T08:51:33.700 に答える
0

さて、あなたが見逃しているのは、おそらく最も有用なビルドアウト拡張機能、mr.developerです。通常、パッケージは、foo.barたとえばgitのように、いくつかのリポジトリに含まれるとしましょう。

ビルドアウトは次のようになります

[buildout]
extensions = mr.developer

[sources]
foo.bar = git git@github.com:foo/foo.bar.git

リポジトリにパッケージがない場合は、fsの代わりに使用できますgit。詳細については、ドキュメントを参照してください。

「ローカル」バージョンのアクティブ化は、

./bin/develop a foo.bar

による非アクティブ化

./bin/develop d foo.bar

あなたができることは他にもたくさんありますmr.developer、それをチェックしてください!

于 2012-04-17T21:12:44.783 に答える