奇妙なインポートエラーがありました。Pythonのインポートに失敗しました
.
+-- outer
| +-- inner
| | +-- __init__.py
| | +-- first.py
| | +-- second.py
| +-- __init__.py
+-- main.py
main.py:
import outer.inner
print(outer.inner.var)
アウター/ __ init__.py:空
アウター/インナー/ __ init__
私はCPythonの-3.5
のディレクトリ構造を使用します.py:
インナー/アウター/ first.py:second.py /インナー/アウター
import outer.inner.second
var = outer.inner.second.var
:
var = 1337
、その後、私はmain.py
を実行し、スクリプトがこのスタックトレースで失敗します。
Traceback (most recent call last):
File "main.py", line 1, in <module>
import outer.inner
File "/outer/inner/__init__.py", line 1, in <module>
import outer.inner.first
File "/outer/inner/first.py", line 2, in <module>
var = outer.inner.second.var
AttributeError: module 'outer' has no attribute 'inner'
したがって、Pythonでは名前を正しくバインドしたくありません。 first.pyでimport文が:import outer.inner.second
がクラッシュすることなく実行され、この文はありません(ただし、必要があります)モジュールはinner
私が間違って何をすればいいという名前の空のパッケージのようなouter
何かを、名前に結合しますか?
「内部」はなぜ「外部」からインポートしようとしていますか?なぜ、 'first.py'は、' from .second import var'からだけですか? – jonrsharpe
@jonrsharpe私はPythonには比較的新しいですが、相対的なインポートはかなり議論の余地があると聞きました。そして、とにかく、私はちょうどここで間違って何がやっているのかを知りたいだけです。 –
https://docs.python.org/3/tutorial/modules.htmlを見てから[まだ必要な場合は質問を明確にするために編集]をクリックします。 – jonrsharpe