36

Pythonライブラリがあります。残念ながら、Python3で動作するようにまだ更新していません。

そのsetup.py中に、私は追加しました

install_requires=['python<3'],

私の意図は、このパッケージが(まだ)機能しないことを知っているため、Python3でこのパッケージをインストール/使用できないようにすることでした。pipPython 2.7.3(すでにインストールされているバージョンです!)をダウンロードしてインストールしようとするため、これが正しい方法ではないと思います。

特定の範囲のPythonインタープリターバージョンに対するライブラリの依存関係をどのように指定する必要がありますか?Programming Language :: Python :: 2 :: Onlyタグを追加する必要がありますか?これにより、Python 3でのインストールが実際に妨げられますか?最小バージョンをPython2.6に制限したい場合はどうなりますか?

私はどこでも機能するソリューションを好みますが、それだけで機能するソリューションをpip選びます(そしてうまくいけばeasy_install窒息することはありません)。

4

3 に答える 3

36

バージョン9.0.1以降、pipは新しいpython_requires文字列を尊重し、インストールに必要なPythonバージョンを指定します。たとえば、Pythonの最小バージョン3.3を適用する場合などです。

setup(
    ...,
    python_requires=">=3.3"
)

詳細については、こちらをご覧ください。SOに関するこの回答も参照してください。

于 2017-07-27T23:10:26.353 に答える
18

考えられる解決策は、Pythonバージョンをテストすることです。これは、現在実行されているバージョン(現在のPython環境にインストールされているバージョン)を除いてPythonバージョンを満たすpipことができないためです。

import sys
if not sys.version_info[0] == 2:
    sys.exit("Sorry, Python 3 is not supported (yet)")

setup(...
于 2012-12-18T01:53:06.047 に答える
4

上記の回答にコメントしてフィードバックを受け取った後、私は自分のコメントを回答に変えようと思いました。上記の回答はすべて問題ありませんが、私の経験から、これらの回答に「欠けている」ものが1つ見つかりました。それを指摘する必要があるため、ここでこの問題について説明します。

イラストを簡潔かつ完全にするために、私は非常に最小限で単純なPython3プロジェクトを作成しました。使用している唯一のサードパーティパッケージは、有名なSSHクライアントパッケージですparamiko(公式のPyPiページはここにあります)。

私のプロジェクトの仮想環境のPythonインタープリターはバージョン3.6.9です。

ここで、python_requires「動作中」の属性を確認するためにsetup.py、次のように見えるプロジェクトのスクリプトに属性を追加しました。

from setuptools import setup, find_packages

setup(name='mySampleProject',
      version='1.0',
      description='Sample project in Python 3',
      author='Guy Avraham',
      license='MIT',
      packages=find_packages(),
      include_package_data=True,
      python_requires='>=3.8',
      install_requires=['paramiko'])

Pythonのバージョンが3.8以降になることが「必要」であることに注意してください。もちろん、これはプロジェクトの仮想環境の現在のPythonバージョンである3.6.9では機能しないはずです。

ここで、で「通常の」使用法を使用してプロジェクトをビルドするとsetup.py、つまり:を実行するpython3 setup.py installと、プロジェクトは正常にビルドされました。pip3 listコマンドを実行した後、コマンドの次の出力を参照してくださいpython3 setup.py install

(mySampleProject_env) guya@ubuntu:~/mySampleProject$ pip3 list
DEPRECATION: The default format will switch to columns in the future. You can use -- 
format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
bcrypt (3.2.0)
cffi (1.14.3)
cryptography (3.1.1)
mySampleProject (1.0)
paramiko (2.7.2)
pip (9.0.1)
pkg-resources (0.0.0)
pycparser (2.20)
PyNaCl (1.4.0)
setuptools (39.0.1)
six (1.15.0)

ご覧のとおり、プロジェクトとそのすべての「サブ依存関係」は、私が予期していなかったにもかかわらず、インストールされました。

一方、コマンドを使用してプロジェクトをインストールするとpip3 install -e .(「現在の作業ディレクトリ」を示すことに注意してください.)、次の出力が得られました。

(mySampleProject_env) guya@ubuntu:~/mySampleProject$ pip3 install -e .
Obtaining file:///home/guya/mySampleProject
mySampleProject requires Python '>=3.8' but the running Python is 3.6.9

これは実際、python_requires属性を「考慮」し、プロジェクトのビルドを「失敗」させます。

これについては、このページのチュートリアルの最初の段落と、このビデオ の09:00から11:00までの間に詳しく説明されています。

注: Python 2(またはPython 2)について上記のすべてをチェックしたわけではありませんpip

于 2020-10-16T09:20:04.943 に答える