PyCharm がモジュールとパッケージを見つけるために Python が使用するパスをどのように決定するかがわかりません。
まず、設定のチェックを外すと(「Python コンソール」と実行構成の両方で)、 の開始時にプロジェクトのディレクトリが引き続き表示されますsys.path
。
たとえば、「パスの問題」にプロジェクトがあり、そこに「実行」すると、
import sys
for p in sys.path:
print p
私は
/Users/Rax/Documents/Projects/pathproblem
... (other things in my PYTHONPATH)
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC
/Library/Python/2.7/site-packages
「コンテンツ ルート」をパスから除外するように要求した場合でも、次のようになります。
これにより、通常のデプロイメントではインポートに失敗するモジュールのインポートが成功する可能性があります (例: パッケージのビルド時)。
設定を確認すると、次の 2 つのメッセージが表示されます。
/Users/Rax/Documents/Projects/pathproblem
... (other things in my PYTHONPATH)
/Users/Rax/Documents/Projects/pathproblem
...
PyCharmはいつも現在のプロジェクトルートをPYTHONPATHの先頭(とみなされるもの)に追加し、この設定はそれを追加するだけである。また最後に。
(1) PyCharm を設定して、プロジェクト ディレクトリをパッケージ検索パスに (実際に) 追加しないようにするにはどうすればよいですか?
また、私が知る限り、PyCharm の PYTHONPATH は、私のシステムの PYTHONPATH ではなく、Python インタープリターのパス設定の「ユーザーが追加した」エントリ (実際、紛らわしいことに、パス設定の最後にある) です。
(2) PyCharm の PYTHONPATH はどこから来るのでしょうか? これは私のシステムの他の場所で見られる PYTHONPATH ではありません。
ちなみに、PyCharm の Sphinx は「コンテンツ ルート」設定を尊重し、ビルド構成でパスがチェックされている場合にのみコンテンツ ルートを追加します。
ベストアンサー1
まず、設定のチェックを外すと (「Python コンソール」と実行構成の両方で)、sys.path の先頭にプロジェクトのディレクトリが引き続き表示されます。
PyCharm はデフォルトでプロジェクト ルートをパスに追加するので、そうなるはずです。
(1) PyCharm を設定して、プロジェクト ディレクトリをパッケージ検索パスに (実際に) 追加しないようにするにはどうすればよいですか?
私の知る限りでは、それはできません。ただし、コンテンツをルートに追加しない方法があります。ただし、その方法を説明する前に、ディレクトリの現在のルートをパスに追加する理由について説明させてください。Python コンソールを開くと、次のようになります。
現在、 というファイルがありfoo.py
、そのファイルには という関数があるのでbar
、その関数をコンソールに簡単にインポートできます。
上の画像からわかるように、PyCharm自動的にcd
現在のルートを追加します。これは驚くことではありません。ディレクトリに入り、次のように実行するとpython foo.py
、暗黙的に現在のルートをパスに追加します。模倣するPython コンソールでこれを実行すると、PyCharm は現在のルートを追加します。
これを避けるには、フォルダを作成するだけでいい。内部現在のルートをソース ルートとしてマークします。
また、ソース ルートはパスに追加されないので、安心できます。
(2) PyCharm の PYTHONPATH はどこから来るのでしょうか? これは私のシステムの他の場所で見られる PYTHONPATH ではありません。
これは通訳者の設定によります:
一般的に、PYTHONPATH
これは基本的に、標準ライブラリ ファイルとサードパーティ ライブラリ ファイルを格納するすべてのディレクトリのコレクションです。