从本地目录导入python包到解释器
我正在开发/testing我的本地目录中的包。 我想在解释器(v2.5)中导入它,但sys.path不包括当前目录。 现在我inputsys.path.insert(0,'.')
。 有没有更好的办法?
也,
from . import mypackage
失败,出现此错误:
ValueError: Attempted relative import in non-package
您只能在模块中使用相对导入,而模块又作为包的一部分导入 – 您的脚本或交互式解释器当然from . import
from . import
(这意味着“从我从相同的包导入”)不起作用。 一旦你确保mypackage
的父目录是在sys.path
(你如何设法让你的当前目录远离 sys.path
我不知道 – 你有什么奇怪的site.py,或……?)
为了让你的当前目录返回到sys.path
中,实际上没有比放在那里更好的方法;-)。
请参阅sys.path的文档:
http://docs.python.org/library/sys.html#sys.path
去引用:
如果脚本目录不可用(例如,如果解释器是交互式调用的,或者脚本是从标准input中读取的),则path [0]是空string,它指示Python首先search当前目录中的模块。
所以,如果你从包含模块的目录启动python解释器,就不需要使用sys.path。
另外,要导入你的包,只需要:
import mypackage
由于包含该包的目录已经在sys.path中,所以应该可以正常工作。
使其工作的一个简单方法是使用python的-m
标志从父目录运行脚本,例如python -m packagename.scriptname
。 显然在这种情况下,你需要一个__init__.py
文件来把你的目录变成一个包。
把事情简单化:
try: from . import mymodule # "myapp" case except: import mymodule # "__main__" case
如果你想运行一个未修改的python脚本,以便从特定的本地目录中导入库,你可以设置PYTHONPATH
环境variables – 例如在bash中:
export PYTHONPATH=/home/user/my_libs python myscript.py
如果你只是想从当前的工作目录导入使用.
符号:
export PYTHONPATH=. python myscript.py
使用sys.path
应该包含当前目录。
尝试:
import .
要么:
from . import sth
然而,这可能不是一个好的做法,那么为什么不使用:
import mypackage