web-dev-qa-db-ja.com

Pythonモジュールをsyspathに追加する方法は?

私はこのようなファイル構造を持っています:

Folder
   Common
      foo1.py
   TestFolder
      foo2.py

foo2.pyおよびfoo1.pyでインポートしたい。試しましたが、Ubuntuでは動作しません:

sys.path.append(os.path.abspath('../../'))
from Common import foo1.py
63
user284474

pythonがモジュールを見つける方法

厳密に言えば、moduleは単一のpythonファイルですが、packageは、pythonファイルを含むフォルダーであり、__init__.pyという名前の(空の場合もある)ファイルを伴い、pythonがモジュールのインポート元のパッケージであることを伝えます。どちらの場合も、モジュールには.py拡張が必要ですが、それらのインポートはなしで行われます(以下を参照)。

デフォルトでは、Pythonは$PYTHONPATHでモジュールとパッケージを探します。

$ PYTHONPATHに含まれるものを調べるには、python(3)で次のコードを実行します。

import sys
print(sys.path)

ディレクトリの追加方法

ときどき

pythonファイル内から、pythonアプリケーションまたはスクリプトのheadセクションに次の行を追加することにより、デフォルトのパスに時々パスを追加できます。

import sys
sys.path.insert(0, "/path/to/your/package_or_module")

例:

フォルダがある場合:/home/myname/pythonfiles、そのディレクトリにあるファイルmodule_1.pyをインポートしたい場合、これをコードのヘッドセクションに追加します。

import sys
sys.path.insert(0, "/home/myname/pythonfiles")

そして、次の方法でファイルmodule_1.pyを簡単にインポートできます。

import module_1

packageを作成し、パッケージからモジュールをインポートする場合、モジュールを含むフォルダーを$PYTHONPATHに作成する必要があります。 __init__.pyという(空の場合もある)ファイル

例:

my_package/home/myname/pythonfilesというパッケージ(フォルダー)からインポートするには、例1のように/home/myname/pythonfilesパスを$PYTHONPATHに追加し、次のようにmodule_2.py(パッケージフォルダー内)というモジュールをインポートします。

from <packagename> import module_2

ディレクトリを$PYTHONPATHに永続的に追加する:

~/.profileファイルに次の行を追加します。

export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add

サブディレクトリ

パッケージ内からは、サブディレクトリはそのようには含まれません。ディレクトリを「チェーン」する必要があります。モジュールmodule_3.pyをインポートするには、フォルダーsubfolderフォルダーpackagename内に:

import packagename.subfolder.module_3

パッケージ内のすべてのサブフォルダーに独自の__init__.pyファイルが含まれているという事実を考えます。

モジュールがスクリプトまたはアプリケーションと同じディレクトリにある場合

モジュールがスクリプトまたはアプリケーションと同じディレクトリにある場合、モジュールへのパスを挿入する必要はありません。モジュールは自動的に追加されます。

例:

script.pymodule.pyを含むフォルダーがある場合、次の方法でモジュールをインポートできます。

import module
111
Jacob Vlijm

相対インポートを使用する正しい方法は次のとおりです。

from ..Common import foo1

また、すべてのフォルダーに__init__.pyも必要です。

6
Sylvain Pineau

NB:この回答はpython 3の最新バージョンでは時代遅れですが、以前のバージョンではここにあります。詳細については、コメントと https://www.python.org/dev/peps/pep-0420/ を読んでください。


基本的にsyspathに追加するpythonコードを含むすべてのフォルダーには、__ init__.pyファイルが必要です。これらの__init__.pyファイルは空にすることができます。

2
don.joey