Python - 导入模块的导入模块

时间:2017-01-01 19:04:09

标签: python class module

我在同一个位置有三个脚本:

   /__init__.py
    interface.py
    radio.py
    playlist.py

playlist.py存储了子类,如:

class playlist1(radio):
    '''child class'''

radio.py有父类:

class radio(object):
    '''parent class'''

我正在尝试运行interface.py,其中包含:

if __name__ == "__main__":
    from playlist import *

playlist.py我有这个导入,反过来:

from radio import radio

但是当我运行interface.py时,我收到以下错误:

ImportError: cannot import name radio

我使用python 2.x。怎么了?

2 个答案:

答案 0 :(得分:1)

您对情况的描述省略了一个关键部分:这些模块所在的包。例如,如果他们住在foo包中,情况将如下所示:

foo/
    __init__.py
    interface.py
    radio.py
    playlist.py

在这种情况下,playlist模块有两种常用方法可以从radio模块导入名称:

# 1. Fully qualified.
from foo.radio import radio

# 2. Relative import.
from .radio import radio

强烈建议使用第二种方法,因为它不会产生歧义。

您还没有告诉我们您的运作方式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

答案 1 :(得分:0)

我认为你只需要创建一个名为

的空文件
__init__.py 

与文件位于同一目录中。这将让Python2知道从这个目录导入是可以的。 然后使用你的代码。