Python パッケージは、別の Python パッケージの特定のバージョン管理リビジョンに依存できますか?
-
21-09-2019 - |
質問
一部の便利な Python パッケージは pypi 上で壊れており、唯一許容されるバージョンはリビジョン管理システムの特定のリビジョンです。それは次のように表現できるだろうか setup.py
例えば
requires = 'svn://example.org/useful.package/trunk@1234'
?
解決
あなたは2つのことを行う必要があります。まず、あなたが望む正確なバージョン、例えばが必要です。
install_requires = "useful.package==1.9dev-r1234"
その後、とは、それを見つけるために場所を指定するdependency_links
の設定が含まれます:
dependency_links = ["svn://example.org/useful.package/trunk@1234#egg=useful.package-1.9dev-r1234"]
#egg=
のURL必見のバージョンdependency_links
部分はの正確のあなたはinstall_requires
で指定したものと一致することに注意してください。これは、2つの部分をリンクするものです。
何が起こるかというとsetuptoolsのは、リンク上で#eggタグを見て、パッケージの正確なバージョンをダウンロードURLとしてURLを保存していることです。それはその要件後で解決しようとすると次に、それは正確なSVN URLをダウンロードする必要があります。
(ただし、このために、の本当に全角>仕事は、目標とSVNのリビジョンが実際にその名前とバージョンを持つ卵を構築しなければならない。そうでなければ、あなたの依存関係が実行時に失敗します!だから、この実際にはあなたが彼らのデフォルトのビルドバージョン番号での使用SVNのリビジョンタグに依存しているパッケージ場合は動作します。)
他のヒント
、あなたは単にあなた自身と、パッケージのバージョンを配布する場合があります。もしあなたのバージョンが使用されているものであることを保証するために、独自の名前空間に必要な置くことを。
私はsetup.py
からこれを参照する方法を考え出したていないが、pip
は、単純な要件ファイルとPythonパッケージの特定のリビジョンをチェックアウトすることができます。要件ファイルと呼ばれるrequires.txt
で、pip install -r requires.txt
は、そのファイル(およびその依存関係)に記載されているすべてのパッケージをインストールします。
ここに私の要件ファイルの一部です。 -e
で始まる行は、私のプロジェクトを含むバージョンコントロール(gitの、SVN、または水銀)からのパッケージの特定のリビジョンをチェックアウトし、編集可能な形でそれらをインストールします。 pip freeze
リストは、すべてこの形式でパッケージをインストールします。
requires.txt
ます:
-e hg+file:///home/me/my-private-project#egg=myproject
-e hg+http://bitbucket.org/ianb/webob@tip#egg=WebOb
-e svn+http://svn.sqlalchemy.org/sqlalchemy/trunk@6638#egg=SQLAlchemy
-e svn+http://svn.zope.org/repos/main/z3c.saconfig/trunk@106508#egg=z3c.saconfig
## The following requirements were added by pip --freeze:
APScheduler==1.01
simplejson==2.0.9
... (many more)
あなたは、特定のバージョンのパッケージをリリースすることができますが、それらを一緒に配布する必要があります。自動的に標準のPythonでそれらをダウンロードする方法はありません。
ただし、ビルドアウトを使用して環境を再現することが可能となりbuildout.cfgを作成することができます。これは、チェックアウトし、あなたがmr.developerのような拡張機能を使用する場合、特定のリビジョンをインストールすることができます。
http://pypi.python.org/pypi/zc.buildoutする http://pypi.python.org/pypi/mr.developerする