11

いくつかの便利なPythonパッケージはpypiで壊れており、受け入れ可能なバージョンはリビジョン管理システムの特定のリビジョンのみです。setup.pyそれは例えばで表現できますか

requires = 'svn://example.org/useful.package/trunk@1234'

4

4 に答える 4

12

あなたは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"]

URLのバージョン#egg=部分は、;で指定したものと完全に一致する必要があることに注意してください。これが2つの部分をつなぐものです。dependency_linksinstall_requires

何が起こるかというと、setuptoolsはリンク上の#eggタグを見て、その正確なバージョンのパッケージの利用可能なダウンロードURLとしてURLを保存します。その後、後でその要件を解決しようとすると、その正確なSVNURLをダウンロードする必要があります。

(ただし、これが実際に機能するためには、ターゲットのSVNリビジョンが実際にその名前とバージョンでeggをビルドする必要があることに注意してください。そうしないと、実行時に依存関係が失敗します!したがって、これは実際には、依存しているパッケージの場合にのみ機能しますonは、デフォルトのビルドバージョン番号でSVNリビジョンタグを使用します。)

于 2010-01-29T17:47:02.050 に答える
2

別のパッケージのあいまいなバージョンが本当に必要であり、他のバージョンを使用する方法がない場合は、そのバージョンのパッケージを独自のバージョンで配布することをお勧めします。必要に応じて、それを独自の名前空間に配置して、使用するバージョンが使用されていることを確認してください。

于 2010-01-18T17:07:01.780 に答える
2

これを参照する方法はわかりませんがsetup.pypip簡単な要件ファイルを使用してPythonパッケージの特定のリビジョンを確認できます。と呼ばれる要件ファイルを使用してrequires.txtpip install -r requires.txtそのファイルにリストされているすべてのパッケージ(およびそれらの依存関係)をインストールします。

これが私の要件ファイルの一部です。最初の行-eは、私のプロジェクトを含むバージョン管理(git、svn、またはmercurial)からパッケージの特定のリビジョンをチェックアウトし、編集可能な形式でインストールします。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)
于 2010-01-27T20:59:55.893 に答える
1

特定のバージョンのパッケージをリリースできますが、それらを一緒に配布する必要があります。標準のPythonでそれらを自動的にダウンロードする方法はありません。

ただし、Buildoutを使用して、環境の複製を可能にするbuildout.cfgを作成できます。mr.developerのような拡張機能を使用している場合は、特定のリビジョンをチェックアウトしてインストールできます。

http://pypi.python.org/pypi/zc.buildout http://pypi.python.org/pypi/mr.developer

于 2010-01-18T18:45:23.983 に答える