サブフォルダーをモジュールとしてインポートしたい。したがって、すべてのサブフォルダーには__init__.py
が含まれます。私のフォルダ構造は次のとおりです。
src\
main.py
dirFoo\
__init__.py
foofactory.py
dirFoo1\
__init__.py
foo1.py
dirFoo2\
__init__.py
foo2.py
メインスクリプトでインポート
from dirFoo.foofactory import FooFactory
このファクトリファイルには、サブモジュールが含まれています。
from dirFoo1.foo1 import Foo1
from dirFoo2.foo2 import Foo2
Foofactoryを呼び出すとエラーが発生します。pythonはサブモジュールfoo1とfoo2をインポートできません。
Traceback (most recent call last):
File "/Users/tmp/src/main.py", line 1, in <module>
from dirFoo.foofactory import FooFactory
File "/Users/tmp/src/dirFoo/foofactory.py", line 1, in <module>
from dirFoo1.foo1 import Foo1
ImportError: No module named dirFoo1.foo1
ここでPYTHONPATH
やsys.path
をいじる必要はありません。
パッケージで絶対インポートを適切に使用するには、次のように「ルート」パッケージ名も含める必要があります。
from dirFoo.dirFoo1.foo1 import Foo1
from dirFoo.dirFoo2.foo2 import Foo2
または、 相対インポート を使用できます。
from .dirfoo1.foo1 import Foo1
from .dirfoo1.foo1 import Foo2
ここで通知するだけです。 (newbee、keviv22から)
あなた自身のために、フォルダやファイルに「-」や「_」のようなスペースや記号を付けてください。そうすると、いくつかの問題に直面するかもしれません。インポートのコマンドが正しい場合、そのような名前のフォルダー内で使用可能な目的のファイルを正常にインポートすることはできません。
次のような無効なフォルダ名:
上記の有効なフォルダー名:
私がやった間違い:
ファイル構造を考慮してください。
Parent
. __init__.py
. Setup
.. __init__.py
.. Generic-Class-Folder
... __init__.py
... targetClass.py
. Check
.. __init__.py
.. testFile.py
やりたいことは?
どのコマンドを実行しましたか?
from Core.Generic-Class-Folder.targetClass import functionExecute
SyntaxError: invalid syntax
のようなエラーが発生しました多くの検索を試み、多くのstackoverflowの質問を見て、何が悪いのか判断できませんでした。私はファイルを複数回クロスチェックしました。__init__.py
ファイルを使用し、環境パスを挿入し、何がうまくいかなかったかを非常に心配しました......
そして、長い長い時間の後、私は私の友人と話をしながらこれを理解しました。そのような命名規則を使用するのは少し愚かです。フォルダーやファイルの名前を定義するためにスペースや特殊記号を使用しないでください。だから、これが私が伝えたかったことです。良い一日を過ごしてください!
(これについての巨大な投稿についてはごめんなさい...ただ私の欲求不満を手放すだけ.... :)ありがとう!)
PYTHONPATH環境変数を設定します。たとえば、次のようなPYTHONPATH =。:..(* nixファミリの場合)。
また、現在のディレクトリ(この場合はsrc)を手動でpythonpathに追加できます。
import os
import sys
sys.path.insert(0, os.getcwd())
プロジェクトが次のように構成されているとします。
+---MyPythonProject
| +---.gitignore
| +---run.py
| | +---subscripts
| | | +---script_one.py
| | | +---script_two.py
run.py
内では、次の方法でスクリプト1と2をインポートできます。
from subscripts import script_one as One
from subscripts import script_two as Two
これで、run.py
の内部で、次の方法でメソッドを呼び出すことができます。
One.method_from_one(param)
Two.method_from_two(other_param)