日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python包里面的dll是什么_Python中的包ImportError

發布時間:2025/3/21 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python包里面的dll是什么_Python中的包ImportError 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

Python中的包給我提供了很好的代碼組織,相似的功能模塊放在同一個包內,不僅代碼結構清晰,而且調用起來也比較方便(可以用*導入)

但是,我們在剛開始使用Python包的時候總是會遇到導入錯誤"ImportError: No module named 'xxx'“,下面我們來簡單介紹一下如何解決這類問題

Python中的包

Python中的包就和C#中的dll一樣都是一些模塊(或者類庫)的集合。Python中新創建的包其實只有兩個文件,一個是以包名命名的文件夾和其中的一個__init__.py文件(包的標識,可以到我之前的文章查看該文件的具體作用?http://www.cnblogs.com/AlwinXu/p/5598543.html )。既然了解了包的定義,那么我們如何引用包呢?在引用之前我們需要知道:

包是否為有效的包(用__init__.py標識)

包的路徑在哪?是否添加到sys.path?

包中是否有要導入的模塊

包的__init__.py中__all__是否包含要使用的模塊(針對用from package import *導入的情況)

所以,當再次遇到導入錯的時候,我們只需要檢查以上四點,基本上能解決大部分的問題。

實例

首先我創建了包含兩個包的工程,目錄結構如下:

下面我們來看一下包導入的各種情況:

導入python自帶包或外部包

Python自帶包可以直接用import package或者from package import module來進行導入,以為自帶包都存在于系統包路徑中,可以通過sys.path來查看:

>>> importsys>>>sys.path

['', '/Users/xualvin/anaconda/lib/python35.zip', '/Users/xualvin/anaconda/lib/python3.5',

'/Users/xualvin/anaconda/lib/python3.5/plat-darwin', '/Users/xualvin/anaconda/lib/python3.5/lib-dynload',

'/Users/xualvin/anaconda/lib/python3.5/site-packages',

'/Users/xualvin/anaconda/lib/python3.5/site-packages/Sphinx-1.3.5-py3.5.egg',

'/Users/xualvin/anaconda/lib/python3.5/site-packages/aeosa',

'/Users/xualvin/anaconda/lib/python3.5/site-packages/setuptools-20.3-py3.5.egg']

第三方python包路徑需要添加到sys.path或者復制到已有sys.path中才可以正常導入。使用sys.path.append("path_to_third_party_packages")進行添加

導入本工程中的包

如在上圖包結構中的RootMain.py中導入Pack1,Pack1.SubPack和Pack2中的模塊:

from Pack1 import *

from Pack1.SubPack1 importSubPack1_Modulefrom Pack2 importPack2_Module

Pack1_Module.ModuleInfo()

SubPack1_Module.PrintInfo()

Pack2_Module.ModuleInfo()

其中Pack1中的__init__.py定義了__all__:

__all__ = ["SubPack1_Module"]

導入父包中的模塊

導入父包中的模塊,比如在Pack1.SubPack1中的SubPack1_Module.py調用Pack1中的Pack1_Module.py模塊:

from Pack1 importPack1_ModuledefPack1Module():

Pack1_Module.ModuleInfo()

導入子包中的模塊

比如在Pack1_Module中導入SubPack1中的SubPack1_Module:

from Pack1.SubPack1 importSubPack1_ModuledefInvokeSubPack1():

SubPack1_Module.PrintInfo()

導入兄弟包中的模塊

這部分其實和第三方包的導入類似,我們需要將兄弟包導入到sys.path中,比如在Pack2中調用Pack1:

首先,在Pack2中導入Pack1的包路徑,在Pack2中的__init__.py中導入(pycharm好像不需要這一步,VS2013的工程需要,不過加上沒有什么錯):

importsys

sys.path.append("/Users/xualvin/Bokeyuan/Pack1")

其次在Pack2中的模塊中調用Pack1,導入方式和Python自帶包一樣:

from Pack1.SubPack1 importSubPack1_Modulefrom Pack1 importPack1_ModuledefInvokePack1():

Pack1_Module.ModuleInfo()

SubPack1_Module.PrintInfo()

總結

Python中的包導入我們只需要注意兩點:一是導入的是不是包,二是導入的包路徑是否能夠被找到(sys.path或者本工程中),只要平時寫程序的時候多注意,肯定可以避免很多麻煩。

總結

以上是生活随笔為你收集整理的python包里面的dll是什么_Python中的包ImportError的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。