Python不能从子目录中导入模块,即使目录中有一个名为u init.py_u的文件

2024-04-23 06:33:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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

myproject
    myscript.py
    MyPackage
        __init.py__
        mymodule.py

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

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__留空
  • 我还尝试了来自python解释器的import语句,该解释器从myproject目录开始
  • 我尝试了以下导入语句:

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

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

如果我在不使用包的情况下将mymodule.py放在项目目录中,那么import可以正常工作。但我不明白为什么从子包导入不起作用。 你知道我怎样才能让它工作吗?

谢谢你的帮助!


Tags: 答案frompyimport目录bininitusr
1条回答
网友
1楼 · 发布于 2024-04-23 06:33:48

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

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

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

相关问题 更多 >