python 同级目录包导入问题,使用"."错误

Pyhton3.6, 使用的是Pycharmpython

 一、测试

同级目录导入包可以使用方式以下;(直接运行.py文件时spa

from test_import2 import Css2
import test_import2                            (直接使用import)
from testwork.test_import2 import Css2         (这种testwork下须要有__init__.py文件,才会把testwork做为一个python的包应用,文件能够是空的,)

包结构如图code

代码文件blog

test_import2 class Css2(): def __init__(self): pass

    def fun2(self): print('t2') test_import1 import sys from .test_import2 import Css2 def aa(): print(sys.path) Css2().fun2() if __name__ == '__main__': print(sys.path) Css2().fun2() test_import3 from testwork import test_import1 test_import1.aa()

在test_import1使用from .test_import2 import Css2 时提示报错图片

Traceback (most recent call last):
File "E:/pycharm/testwork/test_import1.py", line 3, in <module>
from .test_import2 import Css2
ModuleNotFoundError: No module named '__main__.test_import2'; '__main__' is not a packagepycharm

__main__表示程序入口,这里也就是文件自己,意思是文件不是一个Python的包requests

加"."后就报这个错误it

但网上看到其余的资料,和lib/site-pakages中在引用同级文件时也大量采用了 from .models import xx相似的形式;ast

一番折腾下,特别是在site-pakages的requests库下添加测试文件,在使用相似requests的引用,发现也可使用from .models import xx形式的;

最后就像上面建了test_import3,调用test_import1,而test_import1使用from .models import xx形式调用test_import2

发现test_import3能够正常使用;

最后得出结论加"."的间接引用方式不能直接运行,但其它模块可用经过调用他来使用;

 

二、

像图片上这种,大量采用了--from pakages.models import xx 的引用同级目录文件方式;

会出现报错,一、多是包缺乏__init__.py文件,不承认你的文件夹名是一个包

二、多是应为没有搜索路径不对

使用 import sys  sys.path  查看系统搜索路径

要有一个路径是包所在的父目录下,也就是图中“”“ethereum”这个目录的上一级目录;

解决方法是配置搜索路径;(也能够直接把包扔到搜索路径下)

简单的方法在sys.path展现的路径下(最好是选择一个相似这个C:\Python36\Lib\site-packages的路径,它第三方库管理存储的地方)添加xxx.pth文件(内容为你想要加载的包父目录)

如图个人ethereum文件夹就在E:\go\wen这个路径下。

 

以上都是我的实践总结,若有错误,欢迎你们指出

相关文章
相关标签/搜索