我在同一个位置有三个脚本:
/__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
。怎么了?
答案 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知道从这个目录导入是可以的。 然后使用你的代码。