Python 3.6でこのインポートエラーを解決するにはどうすればよいですか?

korommatyi

私は非常に単純な名前空間パッケージを持っています(以下に含まれるコンテンツとディレクトリレイアウト)。インポートしようとするとnamespace_repro.module、次のエラーが発生しますAttributeError: module 'namespace_repro' has no attribute 'module'私が理解している限り、私のパッケージには有効なレイアウトがあり、インポートは機能するはずです。興味深いことに、エラーはPython 3.6.8でのみ発生し、インポートはPython3.7で成功します。

問題を再現する方法は?

私は名前のディレクトリ持っているimport-error-reproことにしてsetup.py、その後(下記参照)、ネストされたディレクトリのパスをsrc/namespace_repro/module、3つのファイルを含む、__init__.pyx.pyy.pyそれらの内容:

setup.py

from setuptools import find_namespace_packages, setup

setup(
    name='namespace-repro',
    version='0.1.0',
    python_requires='>=3.6',
    packages=find_namespace_packages('src'),
    package_dir={'': 'src'},
    zip_safe=False,
)

src/namespace_repro/module/__init__.py

from namespace_repro.module.x import x

src/namespace_repro/module/x.py

import namespace_repro.module.y as y

x = y.y

そして最後にsrc/namespace_repro/module/y.py

y = True

によって新しいPython3.6 conda環境を作成しconda create -n namespace6 python=3.6 ipython、それをアクティブ化して、パッケージを次のようにインストールしましたpip install -e ./import-error-repro-e問題ではありません。問題はそれがなくても再現可能です)。その後、試してみimport namespace_repro.moduleましたipython(ただし、公式のPythonインタープリターでも同じことが起こります)。結果は

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-1-bcae5a697dad> in <module>
----> 1 import namespace_repro.module

~/namespace-repro/src/namespace_repro/module/__init__.py in <module>
----> 1 from namespace_repro.module.x import x

~/namespace-repro/src/namespace_repro/module/x.py in <module>
----> 1 import namespace_repro.module.y as y
      2 
      3 x = y.y

AttributeError: module 'namespace_repro' has no attribute 'module'
---------------------------------------------------------------------------

奇妙なことに、インポートシステムはnamespace_repro.module2回検出されますが、3回目に失敗します。

その他の興味深い動作:

In [1]: import namespace_repro.module.y as y  # This doesn't work.
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-4-4035347ea59b> in <module>
----> 1 import namespace_repro.module.y as y

AttributeError: module 'namespace_repro' has no attribute 'module'

In [2]: import namespace_repro.module.y  # But this one does! Why?

In [3]: dir(namespace_repro.module.y) # The error returns when we actually want to use the module.
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-3-d89bcfd9e509> in <module>
----> 1 dir(namespace_repro.module.y)

AttributeError: module 'namespace_repro' has no attribute 'module'

In [4]: from namespace_repro.module.y import y  # This works fine!

In [5]: y
Out[5]: True

ディレクトリレイアウト

. import-error-repro
+-- setup.py
+-- src
|   +-- namespace_repro
|   |   +-- module
|   |   |   +-- __init__.py
|   |   |   +-- x.py
|   |   |   +-- y.py
デイビスヘリング

これはCPythonのバグ30024であり、当然のことながら3.7で修正されました。3.5以降、相対(循環)インポートを使用したより慣用的な形式が機能していることに注意してください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Python3のこのpipエラーを解決するにはどうすればよいですか?

分類Dev

これを解決するにはどうすればよいですかImportError:python3で名前をインポートできません

分類Dev

Anaconda(Python 3)のSpyderでこのエンコーディングの問題を解決するにはどうすればよいですか?

分類Dev

Python 3で動的相対インポートを実行するにはどうすればよいですか?

分類Dev

この収束エラーを修正するにはどうすればよいですか?Python 3 statsmodels

分類Dev

Python 3からFileNotFoundErrorをインポートするにはどうすればよいですか?

分類Dev

クラス/変数が Python 3 にインポートされたかどうかを検出するにはどうすればよいですか?

分類Dev

Pythonの「Pyzbar」ライブラリのインポートエラーを解決するにはどうすればよいですか?

分類Dev

Python3用のnetfilterqueueをインストールするにはどうすればよいですか?

分類Dev

Python 3用のnltkをインストールするにはどうすればよいですか?

分類Dev

Python 3でprintの構文エラーを修正するにはどうすればよいですか?

分類Dev

Pythonのcsvで3Dテーブルをインポートするにはどうすればよいですか?

分類Dev

Python 3でバイトオブジェクトのエンコーディングを変更するにはどうすればよいですか?

分類Dev

SublimeTextがPython3のアノテーションをサポートするようにするにはどうすればよいですか?

分類Dev

python3、django2の「予期しないトークン」]「」エラーを修正するにはどうすればよいですか?

分類Dev

Python 3でpipをインストールするにはどうすればよいですか?

分類Dev

Python 3をサポートするOSXにvimをインストールするにはどうすればよいですか?

分類Dev

Pythonでこのエラーを解決するにはどうすればよいですか?

分類Dev

Python djangoでこのエラーを解決するにはどうすればよいですか?

分類Dev

virtualenv内にpython3-giをインストールするにはどうすればよいですか?

分類Dev

Google CloudConsoleにPython3をインストールするにはどうすればよいですか?

分類Dev

14.04にpython3-djangoをインストールするにはどうすればよいですか?

分類Dev

Django for Python 3.xをインストールするにはどうすればよいですか?

分類Dev

Django for Python 3.xをインストールするにはどうすればよいですか?

分類Dev

ライブラリにインストールされているものではなく、Homebrewにインストールされているpython3バージョンを使用するにはどうすればよいですか?

分類Dev

インポートされたライブラリのメンバー関数をPython3コンソールで印刷するにはどうすればよいですか?

分類Dev

urllibで404エラーをキャッチするにはどうすればよいですか?(python 3)

分類Dev

virtualenvにPythonパッケージをインストールする際のエラーを解決するにはどうすればよいですか?

分類Dev

カスタムPython3クラスでプリティプリントをサポートするにはどうすればよいですか?

Related 関連記事

  1. 1

    Python3のこのpipエラーを解決するにはどうすればよいですか?

  2. 2

    これを解決するにはどうすればよいですかImportError:python3で名前をインポートできません

  3. 3

    Anaconda(Python 3)のSpyderでこのエンコーディングの問題を解決するにはどうすればよいですか?

  4. 4

    Python 3で動的相対インポートを実行するにはどうすればよいですか?

  5. 5

    この収束エラーを修正するにはどうすればよいですか?Python 3 statsmodels

  6. 6

    Python 3からFileNotFoundErrorをインポートするにはどうすればよいですか?

  7. 7

    クラス/変数が Python 3 にインポートされたかどうかを検出するにはどうすればよいですか?

  8. 8

    Pythonの「Pyzbar」ライブラリのインポートエラーを解決するにはどうすればよいですか?

  9. 9

    Python3用のnetfilterqueueをインストールするにはどうすればよいですか?

  10. 10

    Python 3用のnltkをインストールするにはどうすればよいですか?

  11. 11

    Python 3でprintの構文エラーを修正するにはどうすればよいですか?

  12. 12

    Pythonのcsvで3Dテーブルをインポートするにはどうすればよいですか?

  13. 13

    Python 3でバイトオブジェクトのエンコーディングを変更するにはどうすればよいですか?

  14. 14

    SublimeTextがPython3のアノテーションをサポートするようにするにはどうすればよいですか?

  15. 15

    python3、django2の「予期しないトークン」]「」エラーを修正するにはどうすればよいですか?

  16. 16

    Python 3でpipをインストールするにはどうすればよいですか?

  17. 17

    Python 3をサポートするOSXにvimをインストールするにはどうすればよいですか?

  18. 18

    Pythonでこのエラーを解決するにはどうすればよいですか?

  19. 19

    Python djangoでこのエラーを解決するにはどうすればよいですか?

  20. 20

    virtualenv内にpython3-giをインストールするにはどうすればよいですか?

  21. 21

    Google CloudConsoleにPython3をインストールするにはどうすればよいですか?

  22. 22

    14.04にpython3-djangoをインストールするにはどうすればよいですか?

  23. 23

    Django for Python 3.xをインストールするにはどうすればよいですか?

  24. 24

    Django for Python 3.xをインストールするにはどうすればよいですか?

  25. 25

    ライブラリにインストールされているものではなく、Homebrewにインストールされているpython3バージョンを使用するにはどうすればよいですか?

  26. 26

    インポートされたライブラリのメンバー関数をPython3コンソールで印刷するにはどうすればよいですか?

  27. 27

    urllibで404エラーをキャッチするにはどうすればよいですか?(python 3)

  28. 28

    virtualenvにPythonパッケージをインストールする際のエラーを解決するにはどうすればよいですか?

  29. 29

    カスタムPython3クラスでプリティプリントをサポートするにはどうすればよいですか?

ホットタグ

アーカイブ