从本地目录导入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