あなたの状況についての説明では、重要な部分は省いています。これらのモジュールが存在するパッケージです。彼らはfoo
パッケージに住んでいる場合たとえば、状況は次のようになります。その意味で
foo/
__init__.py
interface.py
radio.py
playlist.py
、radio
モジュールから名前をインポートするplaylist
モジュール用の2つの一般的な方法があります。
# 1. Fully qualified.
from foo.radio import radio
# 2. Relative import.
from .radio import radio
2番目の方法は、あいまいさの余地がないため、強くお勧めします。
また、実行方法についてもお伝えしていません。interface.py
これらの詳細は、輸入状況にも影響を与える可能性があります。
パッケージでコードを整理する場合は、通常の プロジェクト構造に従う必要があります。このレイアウトでは、プロジェクト ルートで作業する傾向があります。また、適切なsetup.py
ファイルが必要です。ここに表示されている設定は次のとおりです。
# ----
# Directory layout.
some_project/
foo/
__init__.py
interface.py
playlist.py
radio.py
setup.py
# You work at this level.
# ----
# interface.py
from playlist import radio
def main():
print radio
# ----
# playlist.py
from .radio import radio
# ----
# radio.py
radio = 123
# ----
# setup.py
from setuptools import setup
setup(
name = 'foo',
version = '1.0',
zip_safe = False,
packages = ['foo'],
entry_points = {
'console_scripts': [
'foobar = foo.interface:main',
],
},
)
# ----
# Install stuff for dev work (ie in "editable" mode).
pip install -e .
# ----
# Run the command line entry point.
foobar
出典
2017-01-01 19:26:35
FMc
ここで示した設定を使用して問題を再現することはできません。あなたが示した3つのファイルを作成して、表示した内容(空の '__init __。py')に加えて、' interface.py'をエラーなく実行できます。ファイルの一つに何か他のことが起こっていると思われます。あるいは、おそらく、別の場所にある 'radio.py'というファイルがあります。 – BrenBarn