python 2.7导入模块问题
2017-08-29 07:55
309 查看
有如下结构的python文件
add.py的内容为:
call_func.py的内容为
在pkg2下运行
会报下面的错误
错误的意思是"没有包的情况下尝试相对导入".为什么?
这就涉及到python 2的模型名问题.再看下面的例子.
add1.py的内容为
call_func1.py的内容如下
运行call_func1.py文件,输出为
可以得到这样一个结论:*程序入口的模块名是__main__,被调用的模块是包名.模块名*. 这就能解释ValueError: Attempted relative import in non-package这个错误了.在第一个工程中call_func.py为程序入口,所以模块名是__main__,根据没有包名作前缀,所以肯定报错.
如何能让call_func.py运行起来?把
改为
在base目录下执行
让call_func在base目录下找pkg1.add,是能找到的.
base |----pkg1 |----__init__.py |----add.py |----pkg2 |----__init__.py |----call_func.py
add.py的内容为:
# coding:utf-8 def add(a, b): return a + b
call_func.py的内容为
# coding:utf-8 from ...pkg1.add import add print(add(1, 1))
在pkg2下运行
python call_func.py
会报下面的错误
ValueError: Attempted relative import in non-package
错误的意思是"没有包的情况下尝试相对导入".为什么?
这就涉及到python 2的模型名问题.再看下面的例子.
base1 |----pkg3 |----__init__.py |----add1.py |----call_func1.py
add1.py的内容为
# coding:utf-8 def add(a, b): print __name__ return a + b
call_func1.py的内容如下
# coding:utf-8 from pkg1.add import add print (__name__) print(add(1, 1))
运行call_func1.py文件,输出为
__main__ pkg1.add 2
可以得到这样一个结论:*程序入口的模块名是__main__,被调用的模块是包名.模块名*. 这就能解释ValueError: Attempted relative import in non-package这个错误了.在第一个工程中call_func.py为程序入口,所以模块名是__main__,根据没有包名作前缀,所以肯定报错.
如何能让call_func.py运行起来?把
from ...pkg1.add import add
改为
from pkg1.add import add
在base目录下执行
python -m pkg2.call_func
让call_func在base目录下找pkg1.add,是能找到的.
参考资料
Relative imports for the billionth time相关文章推荐
- python模块以及导入出现ImportError: No module named 'xxx'问题
- python 通过PIP 安装的模块无法在pycharm中导入问题
- Python中import导入上一级目录模块及循环import问题的解决
- Python 模块导入路径问题
- 关于python2.7中无法导入http.server的问题
- Python 模块导入路径问题
- python模块以及导入出现ImportError: No module named 'xxx'问题
- (转)Python中的模块循环导入问题
- Python 模块导入路径问题
- python导入caffe模块的问题
- Python文件名称与将导入的模块名相同会出现的问题
- python (模块、包)搜索与导入的问题
- Python 模块导入路径问题
- [置顶] 关于python中requests模块导入问题
- python模块导入问题和if __name__ == '__main__'语句的使用
- Python 模块导入路径问题
- Python 模块导入路径问题
- python改变导入模块中的变量的问题
- pycharm集成IDE导入第三方python模块问题
- P4实验问题 解决python模块导入