这些问题详细说明了我无法解释的行为。
src/package/__init__.py
为空但存在。
src/package/subpackage/__init__.py
:
pink = 'It works'
src/package/test/test.py
:
import package.subpackage as subpackage
# I also tried `import package.subpackage as subpackage
print subpackage.pink
从src
:调用python package/test/test.py
失败,出现ImportError: No module named subpackage
。请注意,import package
也不起作用。
注意:(从src
运行一个解释器并键入import语句非常有效。
我应该知道我不应该调用包的子文件吗?在我的项目中,它是一个测试文件,所以对我来说,这里有它是合乎逻辑的。
为什么当前工作目录不在导入路径中?
非常感谢那些阅读和回答的人。
因为你的包裹不在$PYTHONPATH里。如果要调用test.py,可以将test.py文件移动到src/目录,或者将src添加到$PYTHONPATH
来自文档
输出如下
这意味着当前目录也在sys.path中。如果要导入模块,请确保模块路径位于sys.path中,方法是将包目录添加到环境变量PYTHONPATH,或将当前目录或脚本目录更改为包目录。
在python package/test/test.py失败时,它也从src运行:
src
启动interpreter时,''
位于sys.path
中,因此可以找到src
的路径src
运行python package/test/test.py
时,sys.path
中缺少''
,尽管os.path.abspath('.')
显示当前目录是"<xxx>\\src"
,"<xxx>\\src"
不在sys.path
中,而"<xxx>\\src\\package\\test"
在sys.path
中。也就是说,python将文件的路径添加到sys.path
,而不是运行脚本的路径。见what the docs says:
在程序启动时初始化,此列表的第一项,路径[0]是包含用于调用Python解释器的脚本的目录。如果脚本目录不可用(例如,如果以交互方式调用解释器或从标准输入读取脚本),则路径[0]是空字符串,它指示Python首先搜索当前目录中的模块。注意,脚本目录是在PYTHONPATH结果插入的条目之前插入的。
相关问题 更多 >
编程相关推荐