python 2 to python 3からいくつかのコードを移植したかったので、インポートエラーで失敗しました。そのため、移植自体を取り除いてフォーカスしようとしましたインポート時に2つの基本的なpythonでテストするファイルを作成します。ただし、それらを機能させることさえできません。
だから私は2つのファイルを持っています
test.py:
print('Test works')
そしてtest2.py:
from . import test
ただし、結果はPycharmで次のエラーになります。
ImportError:「__main__」から名前「test」をインポートできません(C:/Users/Username/test2.py)
Ubuntu Shellの場合:
トレースバック(最新の呼び出しは最後):ファイル「test2.py」、1行目、 import test1 SystemError:親モジュール ''がロードされていないため、相対インポートを実行できません
どうすれば解決できますか?
この「フォルダー構造が重要」はpython3の大きな問題です。フォルダー構造はコーディングの際には重要ではありませんが、適切に参照する必要があります。
ローカルで実行するか、モジュールの一部として実行するかに応じて、if/elseを使用することに頼りました:
if __name__ == "__main__": # Local Run
import test
else: # Module Run, When going production - delete if/else
from . import test
フォルダー構造が重要です。モジュールに名前を付けていません。 foo
と呼びます。物事を正しい場所に置く:
$ mkdir foo
$ touch foo/__init__.py
$ mv /some/place/{test1,test2}.py foo/
Test.pyファイルを作成する前でも、python -c 'import test'
はすでに機能していることに注意してください。混乱を避けるために、ファイルにtest1.pyという名前を付けることをお勧めします。
コードを呼び出す方法は重要です。 .
ドットがsys.path
にあることを確認します。
$ export PYTHONPATH=.
$ python -m foo.test1
または、必要に応じてこれが機能するはずです。
$ python foo/test1.py
編集:
私は質問#1に答え、OPはこの診断について質問#2を尋ねます。
ImportError:「main」から名前「test」をインポートできません(C:/Users/Username/test2.py)
ファイルを適切な構造で整理してください。 test2.pyをfoo/
ディレクトリ(またはそれを呼び出したいもの)に配置する必要があります。空のfoo/__init__.py
ファイルを作成する必要があります。これは、import
機構にとって重要であるためです。
また、呼び出し環境のPYTHONPATH env varも重要です。コマンドライン環境に加えて、PyCharm環境が導入されました。プロジェクトに合わせてPyCharmを正しく構成するように注意してください。 [設定]-> [プロジェクト構造]をクリックし、foo
がソースフォルダとして表示されることを確認します。次の行を実行すると、どちらの環境でもこれをデバッグできます。
import sys
import pprint
pprint.pprint(sys.path)
プロジェクトが整っていなくてもimport test
は成功するので、test1.py
に名前を変更してimport test1
を使用することをお勧めします。これにより、確実に確実にyourコード。
Python3では
test2.py:
import test
test.py:
if __name__ == "__main__":
print('Test works')
「テスト作品」を他のファイルに印刷する場合 test2.py:
import test
test.main()
test.py:
def main():
print('Test works')
if __name__ == "__main__":
main()
同じ問題があり、2to3変換スクリプトから追加された「from。」を削除してしまいました。