11

Python 2.4 以降を必要とする Python 2 プロジェクト ('foo 0.1.7') があります。

Python 3 ('foo 0.2.0') に移植し、Python 2 との互換性を保ちましたが、要件は Python 2.6 以降に引き上げられました。

  • --target-version=2.6で使用できるsetup.pyのオプションがあることは知っていますuploadが、「2.6以降」を意味するものではないようです
  • setupコマンドにはオプションがありinstall_requiresますが、これは必要なパッケージ用であり、Python インタープリターではありません。

「foo 0.2.0」の setup.py で次のようなことができます。

if sys.hexversion < 0x02060000:
    raise RuntimeError('This package requires Python 2.6 or later, try foo 0.1.7')

しかしeasy_install foo、何らかの方法でこれを解決することをお勧めします。

では、これを PyPI にどのようにデプロイすればよいでしょうか?

4

2 に答える 2

4

アップロードで使用できる setup.py の --target-version=2.6 オプションがあることは知っていますが、「2.6 以降」を意味するものではないようです。

これは実際には bdist_wininst または bdist_msi のオプションであり、実際には「以上」は含まれません。

setup コマンドには install_requires オプションがありますが、これは必要なパッケージ用であり、Python インタープリター用ではありません。

'Python >= 2.6' を install_requires に入れるとうまくいくかもしれません: Python 2.5 から 3.2 までは Python-blahblah-pyXY.egg-info ファイルを作成します。そうでない場合は、おそらく PyPI からダウンロードしようとするので、ええと...

'foo 0.2.0' の setup.py で次のようなことができます: if sys.hexversion < 0x02060000: raise RuntimeError('This package requires Python 2.6 or later, try foo 0.1.7')

これは実際に現在一般的なイディオムです。さらに、「Programming Language :: Python :: XY」のトローブ分類子を使用すると、人間に情報が提供されます (その情報を使用するツールは知りません)。

短期的な未来には、希望があります。Python ディストリビューション メタデータの仕様が更新され、最新バージョンには特定の Python バージョンを要求するフィールドが含まれています: http://www.python.org/dev/peps/pep-0345/#requires-python

ツールのサポートについて: distutils は凍結されており、サポートされません。distutils2 には pysetup と呼ばれる基本的なインストーラーが含まれており、これは Requires-Python フィールドを尊重する必要があります (そうでない場合は、bugs.python.org に報告してください)。

今すぐ問題に対処するために、次のいずれかを行うことができます: - プロジェクトが 2.6+ のみをサポートしていることを宣言する - 2.4 ユーザーがダウンロード時にバージョンを固定する必要があることを文書化する (例: pip install "foo==0.1.7" )

于 2011-10-09T09:44:31.793 に答える
2

あなたが探しているように聞こえるのは、プログラムのバージョン 0.1.7 と 0.2.0 の両方をアップロードし、easy_install-2.5 は自動的に 0.1.7 を使用し、easy_install-2.6 は 0.2.0 を使用する方法です。

その場合、現在のシステムで実行できるかどうかはわかりません...raise RuntimeError()現在利用可能な最良のオプションかもしれません。プロジェクトをインストールする人は、手動でeasy_install-2.5 -U "proj<0.2"、または同様のことを行う必要があります。

distutilsとは言うものの、現在setuptools、 などを という名前の更新されたライブラリに置き換える作業をしている専門のグループがありpackagingます。この新しいライブラリーは、既存の distutils 拡張ライブラリーの機能と、その他の多くの改良点を組み合わせたものです。これは Python 3.3 に含まれる予定で、その後 としてバックポートされる予定ですdistutils2

あなたの質問に特に関連するのは、セットアップメタデータに対する多くの機能強化が含まれていることです。「requires_python」オプションが含まれています。これは、必要な情報を正確に示すように調整されているようです。しかし、彼らがこの情報をどのように利用するつもりなのか、それによって新しいセットアップ システムがあなたの望むように動作するようになるのか、私にはわかりません。

新しいシステムの開発を専門とする Google グループであるパッケージングのフェローシップに投稿することをお勧めしrequires_pythonます。新しいシステムの 1 階が実現可能であると思われる場合 (まだ存在していない場合)。

于 2011-10-03T17:37:13.940 に答える