web-dev-qa-db-ja.com

PYTHONPATHにディレクトリを恒久的に追加しますか?

sys.path.appendを使うときはいつでも、新しいディレクトリが追加されます。しかし、pythonを閉じると、リストは以前の(デフォルトの?)値に戻ります。どうやってディレクトリをPYTHONPATHに永久に追加するのですか?

263
John Howard

新しいディレクトリを環境変数PYTHONPATHに追加する必要があります。これは、その前の内容とコロンで区切ってください。どんな形式のUnixでも、あなたが使っているシェル(あなたの好きなシェルによっては.profileか何か)に適した起動スクリプトで、やはり問題のシェルに依存するコマンドでそれを行うことができます。 Windowsでは、目的のためにシステムGUIを通してそれをすることができます。

それ自体は実際にはプログラミングの問題ではないので、選択したプラットフォームとシェルで環境変数を充実させる方法についての詳細が必要な場合は、superuser.comをお勧めします。

114
Alex Martelli

(MacまたはGNU/Linuxディストリビューションで)bashを使用している場合は、これを~/.bashrcに追加します。

export PYTHONPATH="${PYTHONPATH}:/my/other/path"
370
awesomo

PYTHONPATHを操作する代わりに、 path設定ファイル を作成することもできます。最初にPythonがこの情報を探すディレクトリを見つけます。

python -m site --user-site

何らかの理由で、これはPython 2.7ではうまくいかないようです。そこにあなたが使用することができます:

python -c 'import site; site._script()' --user-site

次に、追加するパスを含む.pthファイルをそのディレクトリに作成します(ディレクトリが存在しない場合は作成します)。

例えば:

# find directory
SITEDIR=$(python -m site --user-site)

# create if it doesn't exist
mkdir -p "$SITEDIR"

# create new .pth file with our path
echo "$HOME/foo/bar" > "$SITEDIR/somelib.pth"
78
sth

これはWindows上で動作します

  1. Windowsの場合、Python 2.7ではPythonのsetupフォルダに行きます。
  2. Lib/site-packagesを開きます。
  3. このフォルダにexample.pth空のファイルを追加します。
  4. ファイルに必要なパスを1行に1つずつ追加します。

そうすれば、スクリプトからこれらのパス内のすべてのモジュールを見ることができます。

27
auserdude

それでも混乱している人がいる場合は - Macを使用している場合は、次の手順を実行します。

  1. ターミナルを開く
  2. open .bash_profileと入力
  3. ポップアップ表示されるテキストファイルで、最後に次の行を追加します。export PYTHONPATH=$PYTHONPATH:foo/bar
  4. ファイルを保存してターミナルを再起動すれば完了です。
19
entrepaul

あなたのpythonrcファイルでパスを追加することができます。これはデフォルトではLinuxでは〜/ .pythonrcです。すなわち。

import sys
sys.path.append('/path/to/dir')

PYTHONPATH環境変数は、グローバルrcファイル(macまたはlinuxの場合は~/.profile)、Windowsの場合は[コントロールパネル] - > [システム] - > [詳細設定]タブ - > [環境変数]で設定できます。

19
Blue Peppers

もう少し説明するために、Pythonは検索パスを自動的に構築します( above および here )を使用してsite.pyスクリプト(通常はsys.prefix + lib/python<version>/site-packagesおよびlib/site-pythonにあります)。 sys.prefixの値を取得できます。

python -c 'import sys; print(sys.prefix)'

次に、site.pyスクリプトは、/usr/{lib,share}/python<version>/dist-packages/usr/local/lib/python<version>/dist-packagesなど、プラットフォームに依存する多数のディレクトリを検索パスおよびこれらのパスを検索して、特定の追加の検索パスを含む<package>.pth構成ファイルを探します。たとえば、easy-installは、Ubuntuの/usr/local/lib/python2.7/dist-packages/easy-install.pthなどのシステム固有のファイルに追加されるインストール済みパッケージのコレクションを維持します。典型的なシステムでは、sys.pathの予期しないパスを説明できるこれらの.pthファイルがたくさんあります。

python -c 'import sys; print(sys.path)'

したがって、.pthファイルを作成して、これらのディレクトリのいずれかに配置できます( above で説明したsitedirを含む)。これは、PYTHONPATHを使用するのではなく、ほとんどのパッケージがsys.pathに追加される方法のようです。

注:OSXには、「フレームワークビルド」用にsite.pyによって追加された特別な追加の検索パスがあります(ただし、Pythonの通常のコマンドライン使用では機能するようです):/Library/Python/<version>/site-packages(Python2.7の場合:/Library/Python/2.7/site-packages/)これは、サードパーティのパッケージがインストールされることになっている場所です(そのディレクトリのREADMEを参照)。したがって、追加の検索パスを含むパス構成ファイルをそこに追加できます。 /Library/Python/2.7/site-packages/pip-usr-local.pthと呼ばれる/usr/local/lib/python2.7/site-packages/というファイルを作成すると、システムpythonがその検索パスを追加します。

13
Pierz

Linuxでは、環境変数を扱わなくても、パッケージからPYTHONPATHのディレクトリへのシンボリックリンクを作成できます。何かのようなもの:

ln -s /your/path /usr/lib/pymodules/python2.7/
9
Zah

私にとっては、.bash_profileファイルを変更したときにうまくいきました。 .bashrcファイルを変更するだけで、シェルを再起動するまでしか機能しませんでした。

Python 2.7では、次のようになります。

export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"

.bash_profileファイルの末尾にあります。

9
Peter Piper

PYTHONPATHが現在存在しない場合、export PYTHONPATH="${PYTHONPATH}:/my/other/path"を〜/ .bashrcに追加しても機能しない可能性があります(:のため)。

export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"

私の〜/ .bashrcに上記を追加すると、Ubuntu 16.04でうまくいきました。

6
boyangeor

Awesomoの答えを追加するためだけに、その行を~/.bash_profileまたは~/.profileに追加することもできます。

5
janex

MacOSでは、特定のライブラリへのパスを指定する代わりに。のルートプロジェクトフォルダへのフルパスを指定する

~./bash_profile 

私の一日を作った、例えば:

export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path"

この後:

source ~./bash_profile
2
testsingh

私はWindows Vista、Python 3.5で恒久的に追加しました

「システム」>「コントロールパネル」>「システムの詳細設定」>「環境変数」>「システム変数」>(「変数」列にPYTHONPATHが表示されない場合)(クリック)新規>変数名:PYTHONPATH>変数値:

変数値にディレクトリを書いてください。ブルーペッパーの答えの詳細です。

1
Cloud Cho

PYTHONPATHに新しいパスを追加するには、次の方法で手動で実行します。

以下のようにして、ターミナルで〜/ .bashrcプロファイルへのパスを追加します。

vim ~/.bashrc

あなたのプロフィールに以下を貼り付けてください。

export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"

それなら、ターミナルでコードを実行するときは必ずbashrcプロファイルを入手してください。

source ~/.bashrc 

お役に立てれば。

1
wpmoradi

A - B間の最短経路は直線である。

import sys
if not 'NEW_PATH' in sys.path:
  sys.path += ['NEW_PATH']
0
Al Kari

以下のスクリプトは、純粋なPythonなので、すべてのプラットフォームで機能します。それはクロスプラットフォームで動くようにするためにここで文書化されているpathlibパスを利用します https://docs.python.org/3/library/pathlib.html 。一度実行したら、カーネルを再起動してください。 https://medium.com/@arnaud.bertrand/modifying-python-s-search-path-with-pth-files-2a41a4143574 にヒントを得たものです。

from pathlib import Path
to_add=Path(path_of_directory_to_add)
from sys import path

if str(to_add) not in path:
    minLen=999999
    for index,directory in enumerate(path):
        if 'site-packages' in directory and len(directory)<=minLen:
            minLen=len(directory)
            stpi=index

    pathSitePckgs=Path(path[stpi])
    with open(str(pathSitePckgs/'current_machine_paths.pth'),'w') as pth_file:
        pth_file.write(str(to_add))
0

Python 3.6.4では、次のようにpythonセッションをまたいでsys.pathを永続化できます。

import sys
import os

print(str(sys.path))

dir_path = os.path.dirname(os.path.realpath(__file__))
print(f"current working dir: {dir_path}")

root_dir = dir_path.replace("/util", '', 1)
print(f"root dir: {root_dir}")

sys.path.insert(0, root_dir)

print(str(sys.path))

私は強くあなたがvirtualenvとvirtualenvwrapperを使うことを強く勧めます

0
Rubber Duck