首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python 27中,imports不应该是绝对的吗?

在python 27中,imports不应该是绝对的吗?
EN

Stack Overflow用户
提问于 2018-02-27 07:09:04
回答 2查看 0关注 0票数 0

想象一下目录结构:

代码语言:txt
复制
/
    a/
        __init__.py
        b.py
        c.py
    c.py

档案/a/b.py看起来:

代码语言:txt
复制
import c
should_be_absolute = c

所有其他文件(包括__init__)是空的。

在运行测试脚本时(使用python 2.7):

代码语言:txt
复制
import a.b
print a.b.should_be_absolute

PYTHONPATH=/从空目录(所以没有被添加到PYTHONPATH从当前目录)我得到

代码语言:txt
复制
<module 'a.c' from '/a/c.py'>

根据PEP 328import <> is always absolute我所期望的陈述:

代码语言:txt
复制
<module 'c' from '/c.py'>

输出与我删除/a/c.py文件时的预期一致。

我错过了什么?如果这是正确的行为 - 如何cb(而不是a.c)导入模块?

根据Pythondev邮件列表这似乎是文档中的一个错误。python27中的默认导入不是绝对的。

EN

回答 2

Stack Overflow用户

发布于 2018-02-27 15:56:21

你需要在Python 2.7上添加from __future__ import absolute_import或使用importlib.import_module('c')

它是Python 3的默认设置。

Python中存在一个错误:__future__.py它的文档声明绝对导入在2.7中成为强制性的,但它们没有

票数 0
EN

Stack Overflow用户

发布于 2018-02-27 16:31:48

如果只是添加/到PYTHONPATH中,那么搜索顺序仍然可以c在当前目录中查找。如果你把所有东西都放在一个根包里,并且绝对地提到它会更好:

代码语言:txt
复制
/myPackage
    a/
        __init__.py
        b.py
        c.py
    __init__.py
    c.py

和PYTHONPATH一样: export PYTHONPATH=/:$PYTHONPATH

所以在a.c你会做的和这些:

代码语言:txt
复制
from myPackage import c
from myPackage.c import Foo
import myPackage.c

这样,它总是相对于你的包。

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

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

复制
相关文章

相似问题

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