我正在我的本地目录中开发/测试包.我想在解释器(v2.5)中导入它,但sys.path不包含当前目录.现在我输入sys.path.insert(0,'.').有没有更好的办法?
也,
from . import mypackage
Run Code Online (Sandbox Code Playgroud)
失败并出现此错误:
ValueError: Attempted relative import in non-package
Run Code Online (Sandbox Code Playgroud)
Ale*_*lli 37
您只能在一个模块中使用相对导入,而该模块又作为包的一部分导入 - 您的脚本或交互式解释器不是,因此当然from . import(这意味着"从我导入的同一个包导入")不行.import mypackage将被罚款,一旦你确保父目录的mypackage是sys.path(你如何设法让你的当前目录远从sys.path我不知道-你有在site.py一些奇怪的事情,还是......?)
让你当前的目录重新进入sys.path那里实际上没有比把它放在那里更好的方法;-).
Spo*_*ser 14
请参阅sys.path的文档:
http://docs.python.org/library/sys.html#sys.path
报价:
如果脚本目录不可用(例如,如果以交互方式调用解释器或者从标准输入读取脚本),path [0]是空字符串,它指示Python首先搜索当前目录中的模块.
因此,如果您从包含模块的目录启动python解释器,则无需使用sys.path.
另外,要导入您的包,只需执行以下操作:
import mypackage
Run Code Online (Sandbox Code Playgroud)
由于包含该包的目录已经在sys.path中,因此它应该可以正常工作.
Gui*_*eim 11
把事情简单化:
try:
from . import mymodule # "myapp" case
except:
import mymodule # "__main__" case
Run Code Online (Sandbox Code Playgroud)
Pie*_*erz 11
如果你想运行一个未经修改的python脚本,以便从特定的本地目录导入库,你可以设置PYTHONPATH环境变量 - 例如在bash中:
export PYTHONPATH=/home/user/my_libs
python myscript.py
Run Code Online (Sandbox Code Playgroud)
如果您只想从当前工作目录导入它,请使用.表示法:
export PYTHONPATH=.
python myscript.py
Run Code Online (Sandbox Code Playgroud)
使其工作的一种简单方法是使用python的-m标志从父目录运行脚本,例如python -m packagename.scriptname.显然,在这种情况下,您需要一个__init__.py文件将目录转换为包.
参加聚会有点晚了,但这对我有用:
>>> import sys
>>> sys.path.insert(0, '')
Run Code Online (Sandbox Code Playgroud)
显然,如果有空字符串,Python 知道它应该在当前目录中查找。我在 中没有空字符串sys.path,这导致了这个错误。