383

を使用するたびにsys.path.append、新しいディレクトリが追加されます。ただし、Pythonを閉じると、リストは以前の(デフォルト?)値に戻ります。ディレクトリを永続的に追加するにはどうすればよいPYTHONPATHですか?

4

21 に答える 21

529

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

export PYTHONPATH="${PYTHONPATH}:/my/other/path"
于 2010-08-04T02:29:53.660 に答える
149

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

superuser.comそれ自体はプログラミングの問題ではないため、選択したプラットフォームとシェルで環境変数を強化する方法の詳細が必要な場合は、さらに質問する方がよい場合があります。

于 2010-08-04T02:33:07.997 に答える
99

操作する代わりに、パス構成ファイルPYTHONPATHを作成することもできます。まず、Pythonがこの情報を検索するディレクトリを見つけます。

python -m site --user-site

何らかの理由で、これはPython2.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"
于 2012-09-07T03:28:30.377 に答える
55

これはWindowsで動作します

  1. Windowsでは、Python2.7を使用してPythonセットアップフォルダーに移動します。
  2. Lib/site-packagesを開きます。
  3. このフォルダーにexample.pthの空のファイルを追加します。
  4. 各行に1つずつ、必要なパスをファイルに追加します。

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

于 2015-06-09T09:49:26.727 に答える
30

それでも混乱している場合は、Macを使用している場合は、次の手順を実行してください。

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

pythonrcファイルを介してパスを追加できます。Linuxではデフォルトで〜/.pythonrcになります。すなわち。

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

PYTHONPATHまた、MacやLinuxなどのグローバルrcファイルで~/.profile、またはWindowsの[コントロールパネル]->[システム]->[詳細設定]タブ->[環境変数]から環境変数を設定することもできます。

于 2010-08-04T02:33:24.190 に答える
18

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

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

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

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

したがって、.pthファイルを作成し、これらのディレクトリのいずれかに配置できます(上記の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がその検索パスを追加します。

于 2016-07-20T16:14:35.303 に答える
14

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

~/.bash_profile 

たとえば、私の一日を作りました:

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

この後:

source ~/.bash_profile
于 2019-03-19T18:22:57.613 に答える
11

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

ln -s /your/path /usr/lib/pymodules/python2.7/
于 2013-03-29T18:47:32.670 に答える
11

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

Python 2.7の場合、次のようになります。

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

.bash_profileファイルの最後に。

于 2014-01-28T14:55:31.553 に答える
9

export PYTHONPATH="${PYTHONPATH}:/my/other/path"〜/ .bashrcへの追加は、PYTHONPATH現在存在しない場合は機能しない可能性があります(が原因:)。

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

上記を私の〜/ .bashrcに追加すると、Ubuntu16.04でトリックが実行されました。

于 2018-02-21T20:30:47.997 に答える
7

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

于 2011-10-27T16:45:54.270 に答える
7

これは、いくつかの古い答えがあるこのスレッドの更新です。

MAC-OS Catalina以降(> = 10.15)を使用している場合は、zsh(古いものの代わりにbash)という名前の新しいターミナルが導入されました。

この変更により、上記の回答に問題が発生しました。ファイルを作成し、ファイルディレクトリをとに貼り付けることで回避策を実行しました~/.zshrc$PATH$PYTHONPATH

だから、最初に私はしました:

nano ~/.zshrc

エディターが開いたら、次のコンテンツを貼り付けました。

export PATH="${PATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
export PYTHONPATH="${PYTHONPATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"

保存し、端末を再起動しました。

重要:上記のパスは私のコンピューターのパスに設定されているため、Pythonに適合させる必要があります。

于 2020-04-05T01:05:31.997 に答える
5

以下のスクリプトは、純粋なPythonであるため、すべてのプラットフォームで機能します。クロスプラットフォームで機能させるために、https: //docs.python.org/3/library/pathlib.htmlに記載されているpathlibパスを利用します。一度実行し、カーネルを再起動すると、それだけです。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))
于 2018-07-11T16:26:10.853 に答える
4

PYTHONPATHへの新しいパスの追加は、次の方法で手動で実行されます。

ターミナルで〜/.bashrcプロファイルにパスを追加します。

vim ~/.bashrc

以下をプロフィールに貼り付けます

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

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

source ~/.bashrc 

お役に立てれば。

于 2018-12-20T21:46:39.153 に答える
2

Windows Vista、Python3.5で恒久的に追加しました

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

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

于 2017-07-10T05:52:32.670 に答える
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を使用することを強くお勧めします。そうしないと、パスが乱雑になります

于 2018-03-01T09:25:30.500 に答える
0

bashからzshに切り替えるときのPythonパスの問題を修正

bashからzshに切り替えたときに、PythonPathの問題が発生しました。

解決策は簡単でしたが、気づきませんでした。

Pipは、パスにないスクリプト blah blahまたはパッケージ blah blahがインストールされ~/.local/binていることを示していました。

.zshrcこの質問に対するいくつかの解決策を読んだ後、私は解決策がすでに存在していることを見つけるために自分を開いた。

私は単に行のコメントを外す必要がありました:

見てください

2020-10-0713-38-17のスクリーンショット

于 2020-10-07T08:34:13.577 に答える
0

andrei-deusteanuの回答に触発されて、これが私のバージョンです。これにより、site-packagesディレクトリにいくつかの追加パスを作成できます。

import os

# Add paths here.  Then Run this block of code once and restart kernel. Paths should now be set.
paths_of_directories_to_add = [r'C:\GIT\project1', r'C:\GIT\project2', r'C:\GIT\project3']

# Find your site-packages directory
pathSitePckgs = os.path.join(os.path.dirname(os.__file__), 'site-packages')

# Write a .pth file in your site-packages directory
pthFile = os.path.join(pathSitePckgs,'current_machine_paths.pth')
with open(pthFile,'w') as pth_file:
    pth_file.write('\n'.join(paths_of_directories_to_add))

print(pthFile)
于 2021-02-25T16:06:53.287 に答える
0

ここでanaconda環境でこれを行うための解決策を見つけました:https ://datacomy.com/python/anaconda/add_folder_to_path/

ただ:

conda develop /your_path

于 2022-01-26T16:21:45.137 に答える
-5

A<->B間の最短経路は直線です。

import sys
if not 'NEW_PATH' in sys.path:
  sys.path += ['NEW_PATH']
于 2019-05-31T17:49:24.743 に答える