web-dev-qa-db-ja.com

python3とpython2にそれぞれ異なるPYTHONPATH変数を設定する方法

特定のライブラリパスをpython2にのみ追加したい。 export PYTHONPATH="/path/to/lib/".bashrcに追加した後、python3を実行すると次のエラーが表示されます。PYTHONPATHがPython 2.xのサイトパッケージdir Python 3.x!

Python2とpython3が共通のPYTHONPATH変数を共有しているためだと思います。

それで、python2とpython3にそれぞれ異なるPYTHONPATH変数を設定できますか。そうでない場合、Pythonの特定のバージョンのみにライブラリパスを追加するにはどうすればよいですか?

37
Douglas Su

mymodule.pth(Windowsの場合)またはlib/site-packages(UnixおよびMacintoshの場合)の下に構成ファイルlib/pythonX.Y/site-packagesを作成し、pythonに追加するディレクトリを含む1行を追加できます。 _パス。

docs.python2 および docs.python から:

パス構成ファイルは、名前がname.pthの形式を持ち、上記の4つのディレクトリのいずれかに存在するファイルです。その内容は、sys.pathに追加される追加項目(1行に1つ)です。存在しないアイテムはsys.pathに追加されることはなく、アイテムがファイルではなくディレクトリを参照するかどうかのチェックは行われません。 sys.pathに複数回追加されるアイテムはありません。空行と#で始まる行はスキップされます。 importで始まる行(スペースまたはタブが続く)が実行されます。

21
zety

PYTHONPATHは、パッケージ管理に関する限り、ややハッキングです。 「きれいな」解決策は、packageライブラリとinstall

これは実際よりもトリッキーに聞こえるかもしれませんので、どのように機能するかを説明します。

「パッケージ」にwow.pyという名前のファイルが1つあり、それを/home/user/mylib/wow.pyに保存するとします。

次の内容のファイル/home/user/mylib/setup.pyを作成します。

from setuptools import setup

setup(name="WowPackage",
      packages=["."],
)

これで、パッケージをPythonディストリビューションに適切にインストール]して、PYTHONPATHについて気にする必要なしに選択できます。「適切なインストール」に関する限り、少なくとも3つのオプションがあります。

  • 「本当に適切」。コードをpython site-packagesディレクトリにコピーします:

    $ python setup.py install
    
  • "開発"。 python site-packagesから/home/user/mylibへのリンクのみを追加します。これは、ディレクトリ内のコードの変更が有効になることを意味します。

    $ python setup.py develop
    
  • "ユーザー"。システムディレクトリに書き込みたくない場合は、パッケージを(「適切に」または「開発モードで」)/home/user/.localディレクトリにインストールできます。ここで、Pythonもそのためには、--userをコマンドに追加するだけです。

    $ python setup.py install --user
    $ python setup.py develop --user
    

開発モードでインストールされたパッケージを削除するには、次のようにします

$ python setup.py develop -u

または

$ python setup.py develop -u --user

「適切に」インストールされたパッケージを削除するには、次のようにします。

 $ pip uninstall WowPackage

パッケージが単一のファイルよりも興味深い場合(たとえば、サブディレクトリなどがある場合)、packages関数のsetupパラメータにそれらをリストするだけです(すべてを再帰的にリストする必要があるため、大きなライブラリにはヘルパー関数を使用します)。それを理解したら、 より詳細なマニュアル も読んでください。

最後に、パッケージをPyPIに投稿します。これは、python setup.py sdist register uploadを呼び出すのと同じくらい簡単です(ただし、PyPIユーザー名が必要です)。

22
KT.

python2専用またはpython3専用のPYTHONPATHを変更する方法がないことがわかりました。 .pthファイルを使用する必要がありました

私がしなければならなかったことは:

  • 自宅にディレクトリが作成されていることを確認してください:$HOME/.local/lib/python${MAJOR_VERSION}.${MINOR_VERSION}/site-packages
  • そのディレクトリに.pthファイルを作成します
  • .pthファイルが機能することをテストします
  • やった

`.pthの詳細については。ファイルの構文とその仕組みについては、 python2 docs および python3 docs をご覧ください。

.pthファイルの概要:pythonインタープリターが起動すると、特定のディレクトリを検索し、.pthファイルを表示し、それらのファイルを開き、ファイルを解析します。これらのディレクトリをsys.path(つまりPYTHONPATHと同じ動作)に追加し、それらのディレクトリにあるpythonモジュールを通常のインポートに使用できるようにします。)

1

lib/site-packagesのドキュメントの移動/追加に煩わされたくない場合は、実行したいpython2.7スクリプトに2行のコードを追加してみてください(以下)。

import sys
sys.path = [p for p in sys.path if p.startswith(r'C:\Python27')]

この方法では、コードを実行するたびにPYTHONPATHが更新されます(すべてのpython3.xパッケージを無視します)。

0
BenSeedGangMu