gpt4 book ai didi

Python-导入模块导入模块

转载 作者:太空宇宙 更新时间:2023-11-03 15:49:45 25 4
gpt4 key购买 nike

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

   /__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时,出现以下错误:

导入错误:无法导入名称 radio

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

最佳答案

您对情况的描述忽略了一个关键部分:这些模块所在的包。例如,如果它们位于 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

关于Python-导入模块导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41418153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com