Python包相对导入错误

wangyue_1 发布于 2015/03/24 22:00
阅读 3K+
收藏 0

Python 3.4版本:

文件的路径定义:其中  /Python 路径已经加入到了 .pth文件当中,sys.path中已经有了/Python路径

Python/
    |----classTest/
    |            |---__init__.py
    |            |---Processor.py
    |            |---UpperCase.py
    |----OtherTest/


Processor.py
class Processor:
    def __init__(self, reader, writer):
        xxxxxxx

    def converter(self, data):
        xxxxxx

    def process(self):
        xxxxxx
UpperCase.py
import sys
from .Processor import Processor


class UpperCase(Processor):
    def converter(self, data):
        xxxxx

if __name__ == "__main__":
    xxxxx

使用PyCharm调试的时候,报出异常:

Traceback (most recent call last):
  File "D:/WorkSpace/Python/classTest/upperCase.py", line 2, in <module>
    from .Processor import Processor
SystemError: Parent module '' not loaded, cannot perform relative import

使用相对包的导入,Processor模块和UpperCase模块位于同一个目录下(包)为什么还是导入失败呢?

PS:classTest不在sys.path目录下,是不是这个原因?

加载中
0
yongzhong
yongzhong

PS:classTest不在sys.path目录下,是不是这个原因?

是的

解决办法:

1.使用pth文件,在 site-packages 文件中创建 .pth文件,名字任意.将模块的路径写进去,一行一个路径

2.使用PYTHONPATH环境变量,在这个环境变量中输入相关的路径,不同的路径之间用逗号分开,如果PYTHONPATH 变量还不存在,可以创建它


0
wangyue_1
wangyue_1

引用来自“HowieHuang”的评论

PS:classTest不在sys.path目录下,是不是这个原因?

是的

解决办法:

1.使用pth文件,在 site-packages 文件中创建 .pth文件,名字任意.将模块的路径写进去,一行一个路径

2.使用PYTHONPATH环境变量,在这个环境变量中输入相关的路径,不同的路径之间用逗号分开,如果PYTHONPATH 变量还不存在,可以创建它


谢谢,不过如果这样,不就是绝对路径导入了嘛?我的.pth文件已经引入了我的一个工程路径:
Python/
    |----classTest/
    |            |---__init__.py
    |            |---Processor.py
    |            |---UpperCase.py
    |----OtherTest/
我的意思是:文件夹classTest下使用了__init__.py,按我的理解,classTest相当于一个包了,并且Processor.py和UpperCase.py是在同一个路径下,那么,UpperCase.py引用Processor.py中的Processor类,直接from .Processor import Processor不就行了?Pycharm编写的时候没有提示报错,但是运行的时候,出现上述错误。
wangyue_1
wangyue_1
回复 @HowieHuang : 好的,谢谢了!看了下Python3.4自带的库文件,里面也没有使用相对导入。至于为什么这儿不能相对导入,暂且给自己留一个疑问吧
yongzhong
yongzhong
一旦出现import,python就只到sys.path去找的,和JAVA什么的不一样.所以不管在不在同一个包下,都要用1,2办法解决.至于为什么不能相对引入,我猜这可能跟python这门语言的特性有关吧...
返回顶部
顶部