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這個路徑下。

 

以上都是我的實踐總結,若有錯誤,歡迎你們指出

相關文章
相關標籤/搜索