我发展/在我的本地目录测试包。我想在解释器(v2.5)中导入它,但sys.path不包含当前目录。现在我输入sys.path.insert(0,'.')
。有没有更好的办法?导入Python包从本地目录入解释
此外,
from . import mypackage
失败,此错误:
ValueError: Attempted relative import in non-package
我发展/在我的本地目录测试包。我想在解释器(v2.5)中导入它,但sys.path不包含当前目录。现在我输入sys.path.insert(0,'.')
。有没有更好的办法?导入Python包从本地目录入解释
此外,
from . import mypackage
失败,此错误:
ValueError: Attempted relative import in non-package
您只能在模块中使用相对导入,而该模块又作为包的一部分导入 - 您的脚本或交互式解释器不是,因此当然是from . import
(意思是“从我得到的相同包中导入从“导入”)不起作用。 import mypackage
一旦你确保mypackage
的父目录在sys.path
(你如何设法从sys.path
得到你目前的目录不知道我不知道 - 你有什么奇怪的site.py,或... ?)
为了让您的当前目录回到sys.path
其实也有比把它;-)有没有更好的办法。
使用sys.path
应该包括当前目录了。
尝试:
import .
或:
from . import sth
但它可能不是一个好的做法,那么为什么不直接使用:
import mypackage
参见SYS文件。路径:
http://docs.python.org/library/sys.html#sys.path
报价:
If the script directory is not available (e.g. if the interpreter is invoked interactively or if the script is read from standard input), path[0] is the empty string, which directs Python to search modules in the current directory first.
所以,没有必要与sys.path的猴子,如果你开始从包含您的模块目录Python解释器。
此外,导入你的包,只是做:
import mypackage
由于包含包的目录已经在sys.path中,它应该工作的罚款。
如果在工作环境的其他地方存在类似的文件名,它将会失败。 – 2016-06-07 12:45:21
@ JAR.JAR.beans当前的工作目录应该是`sys.path`中的第一个,因此应该在工作环境中的任何其他位置找到文件。 – SpoonMeiser 2016-06-07 12:59:04
一个简单的方法,使其工作就是使用Python的-m
标志,例如从父目录运行脚本python -m packagename.scriptname
。很显然,在这种情况下,您需要一个__init__.py
文件来将您的目录变成一个包。
保持简单:
try:
from . import mymodule # "myapp" case
except:
import mymodule # "__main__" case
如果你想要所以它导入库从一个特定的本地目录中运行未经修改的Python脚本可以设置PYTHONPATH
环境变量 - 例如在bash:
export PYTHONPATH=/home/user/my_libs
python myscript.py
如果你只是希望它从当前工作目录中导入使用.
符号:
export PYTHONPATH=.
python myscript.py
你在哪里读了“”是一个Python模块? – 2009-07-11 01:40:23
@Lott:这是一个相对导入路径,在这里描述:http://docs.python.org/reference/simple_stmts.html#the-import-statement – projectshave 2009-07-11 02:41:14