我正在开发/测试本地目录中的软件包。我想将其导入解释器(v2.5),但是sys.path不包括当前目录。现在我输入sys.path.insert(0,'.')。有没有更好的办法?
也,
from . import mypackage
失败并显示此错误:
ValueError: Attempted relative import in non-package
我正在开发/测试本地目录中的软件包。我想将其导入解释器(v2.5),但是sys.path不包括当前目录。现在我输入sys.path.insert(0,'.')。有没有更好的办法?
也,
from . import mypackage
失败并显示此错误:
ValueError: Attempted relative import in non-package
Answers:
您只能在从作为包的一部分导入的模块中使用相对导入-您的脚本或交互式解释器不是,因此,当然from . import(这意味着“从与我导入的包相同的导入”)不会不行 import mypackage将被罚款,一旦你确保父目录的mypackage是sys.path(你如何设法让你的当前目录远从sys.path我不知道-你有在site.py一些奇怪的事情,或...)
sys.path实际上,将当前目录放回该目录中没有比将其放入目录中更好的方法了。
请参阅sys.path的文档:
http://docs.python.org/library/sys.html#sys.path
报价:
如果脚本目录不可用(例如,如果以交互方式调用解释器或从标准输入中读取脚本),则path [0]为空字符串,它指示Python首先在当前目录中搜索模块。
因此,如果您要从包含模块的目录中启动python解释器,则无需使用sys.path。
另外,要导入您的软件包,只需执行以下操作:
import mypackage
由于包含该软件包的目录已经在sys.path中,因此应该可以正常工作。
sys.path因此应该在工作环境中其他任何位置的文件之前找到文件。
sys.path.insert(0, new_path)而不是sys.path.append(new_path)。
如果要运行未修改的python脚本,以便从特定的本地目录导入库,则可以设置PYTHONPATH环境变量-例如在bash中:
export PYTHONPATH=/home/user/my_libs
python myscript.py
如果只希望它从当前工作目录导入,请使用.符号:
export PYTHONPATH=.
python myscript.py
使用sys.path应该已经包括当前目录。
尝试:
import .
要么:
from . import sth
但是,这可能不是一个好习惯,所以为什么不直接使用:
import mypackage