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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python import_Python Import 详解

發(fā)布時間:2025/4/5 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python import_Python Import 详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

import絕對是我們在使用python時最常用的語句之一了,但其實關(guān)于import,需要注意的地方還真不少,如導(dǎo)入第三方庫,導(dǎo)入自己寫的庫,導(dǎo)入相對路徑下文件中的方法,在包內(nèi)部的相對與絕對導(dǎo)入等導(dǎo)入源;有導(dǎo)入的順序;有Lazy Load惰性導(dǎo)入方法;有已經(jīng)導(dǎo)入后的重載等等。本文就旨在講清楚這些問題,并提供足夠的示例以供參考。

Import已安裝的第三方庫

import

import as

from import

from import *

from . import *

import相對路徑下的文件(非package)

只能引用本目錄下的,子目錄,孫目錄等下的文件,不能引用父目錄中的內(nèi)容。

√ 以下是正確的:

import

from import

from

from .. import

× 以下是錯誤的:

import .

from . import

from . import

from .. import

當(dāng)希望import非這些路徑下的文件時:

先把這些文件的父文件夾append到sys.path中,然后直接import它們的名字。

import sys

sys.path.append()

import

在package內(nèi)部import包相對路徑下的文件

包其實可以看作是一種特殊的模塊。例如常規(guī)包的目錄中需要包含 __init__.py 文件,當(dāng)包被導(dǎo)入時,該文件的頂層代碼被隱式執(zhí)行,就如同模塊導(dǎo)入時頂層代碼被執(zhí)行,該文件就像是包的代碼一樣。所以 包是一種特殊的模塊。需要記住的是,所有的包都是模塊,但不是所有的模塊都是包。包中子包和模塊都有 __path__ 屬性,具體地說,任何包含 __path__ 屬性的模塊被認為是包。所有的模塊都有一個名稱,類似于標準屬性訪問語法,子包與他們父包的名字之間用點隔開。

所有含有包內(nèi)引用的腳本都不能直接被運行(python .py),而只能作為包的一部分被導(dǎo)入包外部的其他文件中使用(如from mlib.xxx.xxx import xxx)這里以包名字為mlib為例:

絕對路徑引用

import mlib.

import mlib.

from mlib. import

相對路徑引用

import .

import ..

import ..

from . import

from .

from ..

× 錯誤引用

import

from import

若想運行包內(nèi)某個含有包引用的(相對或絕對都算)腳本:首先,不論如何,你不能試著在包內(nèi)部目錄下運行這個腳本。也就是說,如果你的包叫mlib,那你需要先在命令行中cd到其外部文件夾,只要不在包內(nèi),其他哪里都行。

python -m , 如:python -m ./mlib/utils/test.py。-m flag允許了用戶運行包內(nèi)部的python腳本。

但注意,即使是這樣,依然有一定可能出現(xiàn)相對導(dǎo)入的問題,這個要視具體情況而定。

Lazy Load

如果你不一定會用到某個模塊,但后續(xù)開發(fā)時候又很可能會用到他們,而你既不想每次都手動import, 又不想一次性導(dǎo)入一大堆可能使用的package,有沒有解決方案?

還真有!這時候lazy load將是一個很好的選擇。

下面是一份TensorFlow中包含的 Lazy Load 的代碼。它可以做到并不真正import一個包,但在用戶真正調(diào)用該包、該包的子模塊,或是使用Tab自動補全時候把它真正導(dǎo)入。

代碼

import importlib

import types

?

?

class LazyLoader(types.ModuleType):

"""Lazily import a module, mainly to avoid pulling in large dependencies.?`contrib`, and `ffmpeg` are examples of modules that are large and not alwaysneeded, and this allows them to only be loaded when they are used."""

?

def __init__(self, local_name, parent_module_globals, name):

self._local_name = local_name

self._parent_module_globals = parent_module_globals

?

super(LazyLoader, self).__init__(name)

?

def _load(self):

# Import the target module and insert it into the parent's namespace

module = importlib.import_module(self.__name__)

self._parent_module_globals[self._local_name] = module

?

# Update this object's dict so that if someone keeps a reference to the

# LazyLoader, lookups are efficient (__getattr__ is only called on lookups

# that fail).

self.__dict__.update(module.__dict__)

?

return module

?

def __getattr__(self, item):

module = self._load()

return getattr(module, item)

?

def __dir__(self):

module = self._load()

return dir(module)

使用方法:

from import LazyLoader

os = LazyLoader("os", globals(), "os")

op = LazyLoader("op", globals(), "os.path")

np = LazyLoader("np", globals(), "numpy")

或是如果你想更加優(yōu)雅地一次性導(dǎo)入多個包而不用寫N行重復(fù)代碼:

_import_dict = {

"os": "os",

"sys": "sys",

"time": "time",

"math": "math",

"yaml": "yaml",

"random": "random",

"op": "os.path",

"np": "numpy",

"pd": "pandas",

"pkl": "pickle",

"glob": "glob",

?

"pf": "mlib.file.path_func",

"lang": "mlib.lang"

}

?

for key, value in _import_dict.items():

exec(f"{key}=LazyLoader('{key}', globals(), '{value}')")

你可以自定義你常用的一些模塊和它們的簡稱,然后每次直接調(diào)用這份代碼即可做到迅速而無痛import。

Re-import

如果你已經(jīng)load了一個模塊,但是由對這個模塊本身的代碼做出了修改,此時你也許就需要reload了,尤其是在jupyter環(huán)境下,這將是非常有用的功能。

import

from importlib import reload

reload()

在代碼中通過包的字符串名稱導(dǎo)入包

__import__或importlib.__import__都可以完成該任務(wù),二者完全等價,但根據(jù)python官方文檔建議,個人在代碼中最好不要使用這個函數(shù),而是使用其替代品importlib.import_module(name)。

__import__

__import__(name[, globals[, locals[, fromlist[, level]]]])

參數(shù)介紹:name (required): 被加載 module 的名稱

globals (optional): 包含全局變量的字典,該選項很少使用,采用默認值 global()

locals (optional): 包含局部變量的字典,內(nèi)部標準實現(xiàn)未用到該變量,采用默認值 - local()

fromlist (Optional): 被導(dǎo)入的 submodule 名稱

level (Optional): 導(dǎo)入路徑選項,Python 2 中默認為 -1,表示同時支持 absolute import 和 relative import。Python 3 中默認為 0,表示僅支持 absolute import。如果大于 0,則表示相對導(dǎo)入的父目錄的級數(shù),即 1 類似于 ‘.’,2 類似于 ‘..’。

使用示例:

# import spam

spam = __import__('spam')

?

# import spam.ham

spam = __import__('spam.ham')

?

# from spam.ham import eggs, sausage as saus

_temp = __import__('spam.ham', fromlist=['eggs', 'sausage'])

eggs = _temp.eggs

saus = _temp.sausage

import_module

importlib.import_module(name, package=None)

它最大的優(yōu)點是方便,易于控制,與常見的import語法幾乎完全一致,且支持絕對和相對import。例如:basic=importlib.import_module(".utils.basic", "mlib")。注意當(dāng)name為相對路徑時,package需要指定其父模塊。Import a module. The name argument specifies what module to import in absolute or relative terms (e.g. either pkg.mod or ..mod). If the name is specified in relative terms, then the package argument must be set to the name of the package which is to act as the anchor for resolving the package name (e.g. import_module('..mod', 'pkg.subpkg') will import pkg.mod).

The pkg.mod), while pkg).

If you are dynamically importing a module that was created since the interpreter began execution (e.g., created a Python source file), you may need to call

Import的順序

加載python時默認導(dǎo)入的標準庫 > 同級目錄下的文件(程序根目錄) > PYTHONPATH環(huán)境變量設(shè)置的目錄 > 標準庫 > 第三方庫

關(guān)于第一個“加載python時默認導(dǎo)入的標準庫 ”,可以參見這篇文章中的解釋。

Reference

總結(jié)

以上是生活随笔為你收集整理的python import_Python Import 详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 337p日本大胆噜噜噜鲁 | 国内自拍青青草 | 日韩一区欧美一区 | 97超碰总站 | 男女做爰猛烈吃奶啪啪喷水网站 | 91在现看 | 91草视频| 国产精品一区二区黑人巨大 | 国产1区在线观看 | 扒开美女内裤狂揉下部 | 精品黑人一区二区三区国语馆 | 久久九九国产视频 | 亚洲成人黄色片 | 中文字幕在线网站 | 国产一区二区免费看 | 欧美国产日韩精品 | 国产九九九精品 | 轻轻色在线观看 | 91在线观看免费 | 日韩精品一区不卡 | 国产精品理论在线观看 | 91av小视频 | 久久久久久久久久久久久久久 | 狼性av懂色av禁果av | 日本国产一区二区 | 亚洲激情久久久 | 色妞av | 电影中文字幕 | 一区二区三区资源 | 国产97视频 | 国产二区电影 | 91麻豆成人精品国产免费网站 | 性色国产成人久久久精品 | 天天弄 | 99久精品 | 久久久久亚洲av无码a片 | 六月色| 双性人hdsexvideos| 性视频久久 | 韩国三级在线播放 | 日本精品在线视频 | 在线观看午夜视频 | 懂色av| 欧美国产精品一区二区三区 | 波多野结衣之潜藏淫欲 | 国产精品无码人妻一区二区在线 | 中文字幕网址在线 | h文在线观看 | 国产精品视频久久久久 | 国产偷啪 | 中文一区二区在线播放 | 日韩在线中文字幕视频 | 色七七桃花综合影院 | 欧美日韩国产电影 | 操视频网站 | 看免费一级片 | 美女福利在线视频 | 日日夜夜一区 | 久久久一二三四 | 精品综合久久 | 超能一家人电影免费喜剧在线观看 | 免费av网站在线 | av观看国产 | 五月婷婷丁香激情 | 精产国品一二三区 | 亚洲乱乱| 亚洲特级片| 国产欧美又粗又猛又爽 | 亚洲专区在线播放 | 亚洲区免费 | 99视频免费看 | 国产一级免费片 | 成人国产精品免费观看动漫 | 久久久久国产精品无码免费看 | 亚洲综合在 | av av在线| 伊人av在线播放 | 少妇精品无码一区二区 | www久久com | 性一级视频 | 亚洲中文字幕无码一区 | 日韩精品tv| 一区二区三区激情视频 | 瑟瑟网站免费 | 久久激情片 | a级片视频网站 | 国产麻豆电影在线观看 | 美女黄色在线观看 | 国产xxxxxxxxx | 国产毛片久久久久久久 | 久久综合免费视频 | 国产艳妇疯狂做爰视频 | 国产精品18久久久 | 2018av在线| 一本到在线视频 | 亚洲精品一区二区二区 | 少妇久久久久 | 污漫网站 | 老司机午夜视频 |