首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python3而不是python2上导入模块

问在python3而不是python2上导入模块
EN

Stack Overflow用户
提问于 2015-11-19 17:46:09
回答 1查看 497关注 0票数 0

我有一个具有以下文件结构的项目:

代码语言:javascript
复制
test/
    test.py
    extra/
        stuff.py
        __init.py__

test.py的代码很简单:

代码语言:javascript
复制
import sys
sys.path.append("/path/to/test")
import extra

它使用python3 test.py愉快地运行,但不会在python2.7中运行,而且我阅读了许多关于这个主题的问题后,完全感到困惑。

python 2.7给出的错误是

代码语言:javascript
复制
 Traceback (most recent call last):
   File "test.py", line 3, in <module>
    import extra
ImportError: No module named extra

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-19 17:56:13

这是来自: http://python3porting.com/differences.html的复制粘贴

在Python2中,如果您有一个名为mypackage的包,并且包含一个名为csv.py的模块,它会将csv模块隐藏在标准库中。代码导入csv将在mypackage内导入本地文件,从标准库导入将变得棘手。

在Python3中,这种情况已经改变,这样导入csv就可以从标准库导入,并导入您需要编写的本地csv.py文件。需要将导入csv和从csv导入my_csv更改为从.csv导入my_csv。这些被称为“相对导入”,还有一个语法可以从上面的一个高级模块导入;来自..。进口csv。

如果要同时支持Python2和Python3,而不支持2to3,则需要使用from。从..。自Python2.5以来,语法就可用了,还有一个from将来的导入absolute_import语句,它将行为更改为Python3行为。

如果您需要支持Python2.4或更早版本,则必须详细说明整个包名,以便导入csv从mypkg导入csv,从csv导入my_csv从mypckg.csv导入my_csv。为了清晰和可读性,我将避免相对导入,如果您可以,而且总是详细说明整个路径。

2到3将检查您的进口是否是本地的,并更改它们。

简而言之,Python2允许您处理相对导入,而python3不允许。

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

https://stackoverflow.com/questions/33810861

复制
相关文章

相似问题

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