首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >普通的python导入失败

普通的python导入失败
EN

Stack Overflow用户
提问于 2018-09-21 06:51:17
回答 1查看 0关注 0票数 0

我很困惑为什么一个简单的绝对导入失败。在Python 教程之后,我有一个包含一个子包:

代码语言:javascript
复制
sound/
    __init__.py
    top.py
    formats/
        __init__.py
        a.py
        b.py

a.py包含:

代码语言:javascript
复制
def foo():
    print("foo")

b.py包含:

代码语言:javascript
复制
from a import foo

def bar():
    foo()

if __name__ == "__main__":
    bar()

top.py包含:

代码语言:javascript
复制
from formats import b    

if __name__ == "__main__":
    b.bar()

两个__init__.py文件都是空的。从声音/格式/,foo按预期运行b打印。但是从声音/,运行顶部产生错误:

代码语言:javascript
复制
File ".../sound/top.py", line 1, in <module>
  from formats import b
File "...\sound\format\b.py", line 1, in <module>
  from a import foo
ImportError: No module named 'a'

(注意第一行中正斜杠的奇怪外观和第二行中的反斜杠.Python 3.5,Windows 7 Pro。)这应该不那么复杂 - 允许b一致地导入一个必要的语法是什么?

-----编辑-----

在询问这个问题之前,运行unittest是我应该找到的问题。它还包含一个指向Python Project Howto的伟大指针。

EN

回答 1

Stack Overflow用户

发布于 2018-09-21 16:31:15

这真的不是你应该如何运行你的代码。

使用Python包时,您应该在运行代码时包含文件的文件夹中。那就像去C:\Python35\Lib\site-packages\http\*然后跑步py -3 server.py。EW。不要那样做。

相反,以预期使用的方式使用Python!

代码语言:javascript
复制
⚘ python --help | grep -e -m                                     
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
-m mod : run library module as a script (terminates option list)

您正在创建模块,但您希望能够将它们作为脚本运行。事实证明你可以做到这一点!

代码语言:javascript
复制
> cd ../..
> dir
sound
> python -m sound.formats.b
foo
> python -m sound.top
foo

* 我认为这是路径,但对我来说,Windows已经有一段时间了。如果这是错的,我只是想在这里说明一点!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100005040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档