0

問題

パッケージを正しい site-packages ディレクトリにインストールできないようです。

バックグラウンド

Python 3.3 にアップグレードしたかったのですが、yum を使用するにはまだ python2.6 が必要であることがわかりました (python3 用に構成されていません)。したがって、システムには両方があります。

バージョンごとに個別の pip と easy_install ???

問題は、パッケージをダウンロードして「python setup.py install」を実行すると、それが python2.6 にインストールされていることです。pip と easy_install を使用してみましたが、同じことを行います。解決策は、異なるバージョンの pip (pip_2.6 と pip_3.3) を使用することであると読みました。しかし、個別のバージョンをダウンロードする方法が見つかりません。回避策の 1 つは、pip で「-d PathToSitePackages」引数を指定することですが、これは洗練されていません。

新しいバージョンを使用していない他のプログラム

もう 1 つの問題は、sphinx などのシステムを使用すると、古いバージョンの python が使用されていることです。彼らに新しいバージョンのpythonを使用させる方法がわからないようです。

4

1 に答える 1

1

まず、Python は、X != V の場合に Python XY と Python VW を同時に簡単に使用できるように明示的に設計されています。詳細はPEP 394で説明されていますが、基本的にpython3は常に 3.x バージョンを意味し、ifpythonもまた a を意味します。 3.x バージョンpython2は、2.x バージョンを意味します。pipまたはのような緊密に統合された適切に動作するすべてのスクリプトについても同じことが言えますipython

多くの POSIX プラットフォーム (ほとんどの Linux ディストリビューション、OS X など) には Python の特定のバージョンに依存するコードが含まれているため、これは良いことです。あなた自身のコードのために。

ほとんどのプラットフォームでは、X == V であっても、Y != W である限り簡単です。これは、デフォルトのインストールでも pythonX.Y が提供され、適切に動作するスクリプトが同じように動作するように設定されているためです。この部分は PEP によって義務付けられていないため、一部の Linux ディストリビューションはそれを行っていないか、別の方法で行っています。しかし、幸いなことに、必要なのは 2.6 と 3.3 だけなので、この部分について心配する必要はありません。


したがって、pipPython XY を使用して通常の方法でインストールするだけで、Python XY のサイト パッケージにいくつかの新しいパッケージを取得できます。これは、おそらく次の名前のスクリプトpip-X.Y(アンダースコアではなくハイフンであることに注意してください) と、通常はシンボリック リンクです。pipおよび/またはpip3そのスクリプトに。したがって、これを取得するために何もする必要はありません。

特に、このシーケンスをテストします (ドキュメントがシステム全体のインストールに推奨する方法):

$ curl -O https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
$ sudo python3.3 ez_setup.py
$ curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py
$ sudo python3.3 get-pip.py

… 私はまさにそれで終わった。

そうでない場合は、プラットフォームの詳細、各 Python のインストール方法 (おそらく 2.6 はシステム インストールの一部として提供されましたが、3.3 ではありません)、および各pip.


代わりにsudo yum install python-pipand sudo yum install python33-pip(または) を実行した場合、得られるものはディストリビューション次第であるため、 andおよびシンボリックリンクではなく、たとえば(2.6 の場合) および(3.3 の場合)python3-pipだけになる可能性があります。さまざまなディストリビューションのパッケージの RPM コンテンツを見ると、Red-Hat のようなシステムの標準的な名前はで、 へのシンボリック リンクがあり、場合によっては他の名前が付けられているようです。pippip-3.3pip-2.6pip-3.3pippip3python3-pippip-python3


とにかく、さまざまな方法を組み合わせて一致させない限り、2 つのバージョンを区別する何らかの方法が得られることはほぼ確実です。pip


最悪の場合、 という名前のスクリプトがありpip、最後にインストールしたスクリプトが最初にインストールしたスクリプトを上書きした場合... 最初のスクリプトcp pip pip-2.6をインストールし、2 番目のスクリプトをインストールし、mv pip pip-3.3; ln -s pip-2.6 pip; ln -s pip-3.3 pip3.

または、それさえできない場合、スクリプトは次のような簡単なものです。

#!/usr/local/bin/python3.3
# EASY-INSTALL-ENTRY-SCRIPT: 'pip==1.2.1','console_scripts','pip-3.3'
__requires__ = 'pip==1.2.1'
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.exit(
        load_entry_point('pip==1.2.1', 'console_scripts', 'pip-3.3')()
    )

pipそして、コピーを作成し、そのコピーを s/3.3/2.6/g するだけで (異なるバージョンのを異なるサイト パッケージにインストールした場合は、1.2.1 を置き換える必要がある場合もあります)、動作します。

しかし、実際には、このようになるべきではありません。setuptools と pip はどちらも PEP 394 を尊重しており、いくつかのルールやその python 3 パッケージを必要としないパッケージ マネージャーは役に立ちません。したがって、これらのトリックが必要だと思う場合は、おそらく以前に何か間違ったことをした可能性があります。

于 2013-09-19T20:55:58.593 に答える