python3スクリプトscript.pyがあり、その中にclazz.pyで定義されているクラスFoobarをインスタンス化したいと思います。ただし、インポートしようとすると、次のようになります。
$ python3 script.py
...
SystemError: Parent module '' not loaded, cannot perform relative import
これが私のファイル構造です:
python_import/
├── __init__.py
├── clazz.py
└── script.py
clazz.py:
class Foobar():
def __init__(self):
print("initialized a foobar")
script.py:
from .clazz import Foobar
foobar = Foobar()
;を削除すると、正常に実行さ.
れimport
ます。ただし、これを行うと、私のIDE(Intellij IDEA)はインポートに赤い下線を引き、何もオートコンプリートしません。.
python3に含めるのは正しいと思いますが、Intellijはそれを気に入っているようですが、削除しない限りプログラムが実行されないのはなぜですか?
私は読んだことがあるhttp://www.diveintopython3.net/porting-code-to-python-3-with-2to3.html#import、http://python.readthedocs.org/en/latest/reference/import.html、同じディレクトリまたはサブディレクトリ内にクラスをインポートする方法は?、Python3での相対インポートとPython3での相対インポートが機能しません。
virtualenvと関係があるのではないかと思いますが、a)作業ディレクトリがPYTHONPATHの一部にならない理由がわかりません。b)virtualenvで変更する方法がよくわかりません-Intellijが設定しました私のために。
IDEが気に入って.
いる理由は、スクリプトがパッケージpython_import/
に含まれていることを認識しているためですが、コマンドラインから実行すると、インタープリターはパッケージについて何も認識しないため、相対インポートは機能しません。
「未解決の参照」の赤い線のエラーを排除するには、PyCharmの未解決の参照の問題を参照してください。完全な図が段階的に示されています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加