python的package问题
来源:互联网 发布:金越软件 编辑:程序博客网 时间:2024/06/07 15:27
常用的例子如下:
但是如何解决这个问题呢,如何从一个模块中引用另一个模块,并且可以做单元测试,我这里提供一种办法,
通过将上级目录加入PYTHONPATH中就可以让解释器找到相应的模块。
package
----subpack1
----__init__.py
----module11.py
----subpack2
----__init__.py
----module21.py
其中module.py内容如下:
def funA():print "funcA in module 11"return
现在在package中写一个测试脚本:
from subpack1.module11 import * if __name__ == '__main__': funA()
写完测试没有问题,如果我们在module21..py中应用modle11.py中的函数或方法如何实现呢?
如果在module21..py中内容如下:
from subpack1 import module11def funB(): module11.funA()if __name__ == '__main__': funB()
此时编译会报错,ImportError: No module named subpack1
如果再修改一下, from ..subpack1 import module11
此时还是会报错,ValueError: Attempted relative import in non-package
这个错误原因网上有解释,
包含相对路径import 的python脚本不能直接运行,只能作为module被引用。原因正如手册中描述的,所谓相对路径其实就是相对于当前module的路径,但如果直接执行脚本,这个module的name就是“__main__”, 而不是module原来的name, 这样相对路径也就不是原来的相对路径了,导入就会失败,出现错误“ValueError: Attempted relative import in non-package”Note that both explicit and implicit relative imports are based on the name of the current module. Since the name of the main module is always"__main__", modules intended for use as the main module of a Python application should always use absolute imports.
但是如何解决这个问题呢,如何从一个模块中引用另一个模块,并且可以做单元测试,我这里提供一种办法,
import os,sys#os.path.abspath(os.path.join(os.path.dirname('settings.py'),os.path.pardir))module1 = os.path.abspath(os.path.join(os.getcwd(),os.path.pardir))sys.path.append(module1)print sys.pathfrom subpack1 import module11def funB(): module11.funA()if __name__ == '__main__': funB()
通过将上级目录加入PYTHONPATH中就可以让解释器找到相应的模块。
- python的package问题
- Python 导入自定义的package
- Python的Module和Package
- Python安装新的package
- vitualenv中的python package覆盖问题
- package包编译的问题
- python package
- git 上的 python package 的安装
- 常用的python package下载(windows)
- python中的模块以及package的小结
- Python第三方包(package)的使用
- 安装python package的经验和常用命令
- python __future__ package的几个特性
- Python的package安装到哪里了?
- python的psutil package简直不要太好用
- python,pip及各种package的安装
- 如何构建自己的python package
- Python中相见恨晚的开源package
- CE游戏修改器制作游戏修改器傻瓜教程
- 【jquery】jquery实现回旋滚动效果
- c++实现银行家算法
- Ubuntu 下 samba 配置
- 确定表是否存在高水位问题
- python的package问题
- Topplogical-Sort
- Ubuntu 下 Samba 配置
- 线程递归互斥:ACE_Recursive_Thread_Mutex类
- winsock中怎么获取本机的IP地址
- fedora17, 64位,源码编译安装xen-4.1.4
- 网站项目必备——12款经典的白富美型 jQuery 图片轮播插件
- 虚拟地址、物理地址及MMU的理解
- 2013年4月27日(7-8,位图裁剪)