gpt4 book ai didi

即使目录中有一个名为 __init.py__ 的文件,Python 也无法从子目录导入模块

转载 作者:太空狗 更新时间:2023-10-29 18:07:12 24 4
gpt4 key购买 nike

我知道这个问题在这里被问过很多次,我可能已经阅读了大部分答案(包括 thisthat )以及 python 文档,但仍然找不到我非常简单的答案导入问题。它是如此简单,以至于我一定错过了一些愚蠢的东西,但我还没有看到它。我设置了以下结构:

myproject
myscript.py
MyPackage
__init.py__
mymodule.py

我只想从 myscript.py(或应该相同的命令行 python 解释器)加载 mymodule.py。

myscript.py 包含:

#!/usr/bin/python
import MyPackage

__init.py__ 包含:

from . import mymodule

mymodule.py 包含

#!/usr/bin/python

def myfunction():
print "mymessage"

我的目标是从 myscript.py 调用 myfunction 但如果我尝试调用我得到的模块

$python myscript.py 
Traceback (most recent call last):
File "myscript.py", line 2, in <module>
import MyPackage
ImportError: No module named MyPackage

我已经尝试过的:

  • 我尝试了 OSX 和 Ubuntu Linux 下的一切,以减少错误安装 python 的可能性。
  • 我将 PYTHONPATH 环境变量设置为 myproject 目录以及 . 和两者。
  • 我将 __init.py__ 留空
  • 我也尝试了从 myproject 目录启动的 python 解释器的 import 语句
  • 我尝试了以下导入语句:

    from MyPackage import mymodule
    import MyPackage.mymodule
    import MyPackage.mymodule as module

    都没有成功(同样的错误信息)。

如果我将 mymodule.py 放在项目目录中而不使用包,导入工作正常。但我不明白为什么从子包导入不起作用。知道如何让它发挥作用吗?

感谢您的帮助!

最佳答案

在编辑您帖子的格式时,我注意到您正在调用您的文件 __init.py_。这会导致 python 无法将您的 MyPackage 目录识别为包,因此出现 ImportError: No module named MyPackage

它应该是 __init__.py(名称 __init__,扩展名 。 py)。然后它将起作用,您的项目结构和导入语句在其他方面都是正确的。

但有一点要点:您还应该使用 lower_underscore 样式来命名您的包。包在 Python 中也是模块,它们应该遵循相同的命名约定。参见 PEP8有关推荐样式和命名约定的详细信息。这只是一个约定,与您的问题无关。

关于即使目录中有一个名为 __init.py__ 的文件,Python 也无法从子目录导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20593493/

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