Pythonで相対インポートを作成しようとしています。しかし、構文を理解できず、ここSOで検索するたびに、答えを得ることができません。
これが私のフォルダ構造です:
Root
libraries
mylibrary
__init__
projects
project
myproject.py
相対パスを使用して「mylibrary」をインポートしたいのですが、それを行うための構文は何ですか?
ディレクトリを python パスに追加する必要があります。
import sys
sys.path.append("/libraries")
しかし、ライブラリを必要とするプロジェクトのフォルダーにライブラリを配置するか、sys.path に既にある標準的な場所の 1 つにライブラリをインストールする方がよいと思います。
簡単な一言では済まないと思いますimport
。私がすることは、ライブラリフォルダーへの相対パスを追加して、次のsys.path
ようにすることです。
import sys
sys.path.append('../../')
from libraries import mylibrary
projects/project
これは、ディレクトリから python インタープリターを起動した場合にのみ機能することに注意してください。
相対インポートには不幸な混乱の元があります。それらについて初めて知ったとき、インポートされる個々のファイルを参照するために、一般に相対ファイル/ディレクトリ パスを使用できると考えるでしょう。(少なくとも、私はそう思っていました。) 実際、パッケージ内で相対パスしか使用できません。これは、パッケージ内の特定のモジュールが、同じパッケージ内から他のモジュールをインポートする必要がある場合に、相対インポート構文を使用できることを意味します。
あなたの例では、 myproject.py は mylibrary と同じパッケージに含まれておらず、実際にはどのパッケージにも含まれていないため、 myproject.py 内から相対インポートを使用する方法はありません。そのような状況では、相対インポートは適用されません。
必要な効果を得るためにできることがいくつかあります。1 つは、システムの site-packages ディレクトリのサブディレクトリにライブラリを配置することです。もう 1 つは、システムのサイト パッケージ ディレクトリに .PTH ファイルを配置する方法です。これらの .PTH ファイルには、ライブラリが保存されている場所へのパスが含まれています。もう 1 つは、PYTHONPATH を使用して、ライブラリを格納するディレクトリを指すことです。