1. ホーム
  2. python

[解決済み] Pythonの検索パスを他のソースに展開する

2022-07-09 03:23:06

質問

私は、かなり大きな既存のコードベースを持つプロジェクトに参加したところです。私たちは Linux で開発しており、IDE を使用していません。私たちはコマンドラインを通して実行します。私は、プロジェクト モジュールを実行するときに、正しいパスを検索するために python を取得する方法を見つけ出そうとしています。例えば、私が何かを実行するとき、次のようなものです。

python someprojectfile.py

私は

ImportError: no module named core.'somemodule'

私は、パスの問題だと仮定して、私のすべてのインポートに対してこれを取得します。

どのようにしたらPythonに ~/codez/project/ とすべてのファイルやフォルダを *.py のファイルをインポートすることができますか?

どのように解決するのですか?

いくつかの方法が考えられます。

  • 環境変数を設定する PYTHONPATH に、インポートされたモジュールを検索するディレクトリをコロンで区切ったリストを設定します。
  • プログラム中では sys.path.append('/path/to/search') を使って、Python にインポートされたモジュールを検索させたいディレクトリの名前を追加します。 sys.path は Python がモジュールのインポートを要求されるたびに検索するディレクトリのリストに過ぎず、必要に応じて変更することができます(ただし、標準のディレクトリを削除することはお勧めしません!)。環境変数に入れたディレクトリは PYTHONPATH に入れたディレクトリは sys.path に挿入されます。
  • 使用方法 site.addsitedir にディレクトリを追加します。 sys.path . これと単なる追加との違いは addsitedir を使う場合、それはまた .pth ファイルを探し、それを使って追加のディレクトリを sys.path に追加することができます。詳細はドキュメントを参照してください。

これらのうちどれを使いたいかは、あなたの状況によります。あなたのプロジェクトを他のユーザーに配布するとき、彼らは通常PythonのコードファイルがPythonのインポーターによって自動的に検出されるような方法でインストールすることを覚えておいてください(つまり、パッケージは通常、Pythonのインストールディレクトリにある site-packages ディレクトリにインストールされます) ので、もしあなたが sys.path をいじると、そのコードが他のコンピュータで実行されたときに、不必要な、そして有害な影響を与えるかもしれません。開発においては、あえて言うなら PYTHONPATH を設定することが、通常は最善の方法だと思います。

しかし、自分のコンピュータで実行するだけのものを使っている場合(あるいは、ウェブアプリのフレームワークで時々あるような、非標準の設定をしている場合)、次のようなことをするのは全く珍しいことではありません。

import sys
from os.path import dirname
sys.path.append(dirname(__file__))