从本地目录导入Python包到解释器
我正在本地目录中开发和测试一个包。我想在解释器(版本2.5)中导入它,但发现sys.path里没有当前目录。现在我需要输入 sys.path.insert(0,'.')
来手动添加。有没有更好的方法呢?
另外,
from . import mypackage
运行时出现了这个错误:
ValueError: Attempted relative import in non-package
10 个回答
21
保持简单:
try:
from . import mymodule # "myapp" case
except:
import mymodule # "__main__" case
21
查看关于 sys.path 的文档:
http://docs.python.org/library/sys.html#sys.path
引用一下:
如果脚本所在的目录不可用(比如说,当你在交互模式下运行解释器,或者脚本是从标准输入读取的),那么 path[0] 就是一个空字符串,这样 Python 会优先在当前目录中查找模块。
所以,如果你是在包含你模块的目录下启动 Python 解释器,就不需要去修改 sys.path。
另外,要导入你的包,只需这样做:
import mypackage
因为包含这个包的目录已经在 sys.path 里,所以应该可以正常工作。
61
你只能在一个被当作包导入的模块中使用相对导入。换句话说,如果你的脚本或者交互式解释器没有被当作包导入,那就不能使用 from . import
这种方式(这个意思是“从我被导入的同一个包中导入”)。不过,使用 import mypackage
是可以的,只要你确保 mypackage
的父目录在 sys.path
中(我不知道你是怎么让当前目录不在 sys.path
中的——是不是在 site.py 里做了什么奇怪的事情?)
要把当前目录放回 sys.path
中,其实没有比直接把它放进去更好的办法了。