私はPython 3 Modules tutorialに続き、絶対的または相対的なイントラパッケージインポートは動作しません。モジュールとイントラパッケージのインポートに関する公式のPython 3チュートリアルを複製しましたが、引き続きImportError例外とSystemError例外を受け取りました
具体的には、チュートリアルのプロジェクト構造を複製しました。 sound
フォルダは私の家の/home/user/
ディレクトリにあります。すべてのプロジェクトファイル(filters/vocoder.py
およびeffects/surround.py
を除く)は空で、touch
を使用して生成されています。命令filters/vocoder.py
1として
sound/ Top-level package
__init__.py Initialize the sound package
formats/ Subpackage for file format conversions
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
effects/ Subpackage for sound effects
__init__.py
echo.py
surround.py
reverse.py
filters/ Subpackage for filters
__init__.py
equalizer.py
vocoder.py
karaoke.py
含まれています。このファイルを実行すると
from sound.effects import echo
、それはインポートエラーになり:
[email protected]:~/sound$ python filters/vocoder.py
Traceback (most recent call last):
File "filters/vocoder.py", line 1, in <module>
from sound.effects import echo
ImportError: No module named 'sound'
[email protected]:~/sound$ cd filters/
[email protected]:~/sound/filters$ python vocoder.py
Traceback (most recent call last):
File "vocoder.py", line 1, in <module>
from sound.effects import echo
ImportError: No module named 'sound'
同様に、私は次の行のそれぞれを実行しましたeffects/surround.py
のコードを別に(私は#
の行にコメントしてスクリプトを再実行しました):
[email protected]:~/sound$ python effects/surround.py
Traceback (most recent call last):
File "effects/surround.py", line 1, in <module>
from . import echo
SystemError: Parent module '' not loaded, cannot perform relative import
[email protected]:~/sound$ cd effects/
[email protected]:~/sound/effects$ python surround.py
Traceback (most recent call last):
File "surround.py", line 1, in <module>
from . import echo
SystemError: Parent module '' not loaded, cannot perform relative import
、なぜ私は絶対的および相対的輸入は私のパッケージで動作させることはできません。で結果を実行したとき
from . import echo
from .. import formats
from ..filters import equalizer
?私は、チュートリアルを見ていた
mkdir ~/sound
touch ~/sound/__init__.py
mkdir ~/sound/formats
touch ~/sound/formats/__init__.py
touch ~/sound/folder/wavread.py
touch ~/sound/folder/wavwrite.py
touch ~/sound/folder/aiffread.py
touch ~/sound/folder/aiffwrite.py
touch ~/sound/folder/auread.py
touch ~/sound/folder/auwrite.py
mkdir ~/sound/effects
touch ~/sound/effects/__init__.py
touch ~/sound/folder/echo.py
touch ~/sound/folder/surround.py
touch ~/sound/folder/reverse.py
mkdir ~/sound/filters
touch ~/sound/filters/__init__.py
touch ~/sound/folder/equalizer.py
touch ~/sound/folder/vocoder.py
touch ~/sound/folder/karaoke.py
echo "from sound.effects import echo" >> ~/sound/filters/vocoder.py
echo "from . import echo" >> ~/sound/effects/surround.py
echo "from .. import formats" >> ~/sound/effects/surround.py
echo "from ..filters import equalizer" >> ~/sound/effects/surround.py
は、Pythonライブラリの検索であなたの '/ホーム/ user'ディレクトリですパス?あなたがリンクしたドキュメントには次のように書かれています: "パッケージをインポートするとき、Pythonはsys.path上のディレクトリを検索し、パッケージのサブディレクトリを探します。 'sound'を含むディレクトリが' sys.path'にない場合、 'sound'は見つかりません。 – BrenBarn
わかりませんが、どうすれば確認できますか?'printenv PYTHONPATH'を実行しても結果は表示されませんでした。 – Greg
Pythonインタプリタの内部から 'import sys'と' print sys.path'を実行できます。 '/ home/mypythonstuff'のようなディレクトリを作成し、それをPYTHONPATHに追加したいと思うでしょう。あるいは、[per-user site-packages directory](https://www.python.org/dev/peps/pep-0370/)を使うこともできます。これはUnix系のシステムでは〜/ .local/lib/python3.5'となります。 – BrenBarn