首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 2.7在其搜索路径中找不到模块

Python 2.7在其搜索路径中找不到模块
EN

Stack Overflow用户
提问于 2020-05-24 00:51:44
回答 1查看 80关注 0票数 1

我想测试Python2.x的相对导入模型

目录树

代码语言:javascript
复制
exercises/
    dir1/
        dir2/
            mod.py
            dir3/
                mod2.py
                mod3.py

mod.py

代码语言:javascript
复制
import sys
print 'in dir1/dir2/mod.py'
path = [name for name in sys.path if 'Frameworks' not in name]. 
print 'Module search path of mod is:\n' + str(path)

import dir3.mod2

mod2.py

代码语言:javascript
复制
print 'in dir1/dir2/dir3/mod2.py' 
import mod3

mod3.py

代码语言:javascript
复制
print 'in dir1/dir2/dir3/mod3.py by relative import'

'mod3‘将从’dir3 3‘中导入'mod2’,后者将导入‘mod3’。在Python3.x中,这将失败,因为没有提供“mod3”的路径;在Python2.x中,解释器搜索包含“mod2”的相同目录,然后从'mod‘的顶层目录开始搜索路径的其余部分。

这是我得到的错误消息:

代码语言:javascript
复制
MacBook-Pro-9 exercises % python dir1/dir2/mod.py
in dir1/dir2/mod.py
Module search path of mod is:
['Users/arthur/Desktop/learning_python/exercises/dir1/dir2', '/Library/Python/2.7/site-packages']
Traceback (most recent call last):
  File "Desktop/learning_python/exercises/dir1/dir2/mod.py", line 8, in <module>
    import dir3.mod2
ImportError: No module named dir3.mod2

我知道'dir2‘包含’di3/mod2 2‘,但是由于某种原因,Python找不到它。我确信import语句的语法是正确的。

我修改了print语句,并将'mod2.py‘代码更改为读取from . import mod3。我没有编辑任何其他东西,而且它在Python3.8中运行得很好,找到‘di3.mod2’没有问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-24 01:57:56

您必须在dir3中为python添加一个名为init.py的空文件,以便能够将该目录识别为package目录。如果你有这些文件

代码语言:javascript
复制
dir3/__init__.py
dir3/mod2.py
dir3/mod3.py

现在,您可以将mod2.py和mod3.py中的代码作为

代码语言:javascript
复制
import dir3.mod2
import dir3.mod3

代码语言:javascript
复制
from dir3 import mod2
from dir3 import mod3

如果删除init.py文件,Python将不再在该目录中查找子模块,因此导入模块的尝试将失败。

这是一个链接

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

https://stackoverflow.com/questions/61980354

复制
相关文章

相似问题

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