导入模块 Python 与例子

⚡ 智能摘要

导入 Python 允许一个文件重用另一个文件中定义的变量、函数和类。模块就是一个 .py 文件,而包则将相关的模块分组到一个以 __init__.py 文件为标识的目录中。

  • 🔘 什么是模块? 模块是一个单独的 .py 文件,其中包含变量、函数或类。
  • ☑️ 导入关键字: import 语句加载整个模块;module_name.function_name 调用其成员。
  • 选择性导入: from module import name 只会引入你需要的函数或变量。
  • 🧪 别名: import module as alias 可以缩短长名称;from module import * 会暴露所有内容。
  • 🛠️ 软件包和路径: __init__.py 将文件夹转换为包;sys.path 列出搜索位置。
  • 🤖 人工智能工作流程: 机器学习项目导入 NumPy、pandas 和 PyTorch 作为模块。

导入模块 Python

以下各节解释了模块、包、不同的导入方式,以及绝对导入和相对导入的工作原理。 Python.

模块有哪些 Python?

模块是一个文件,它包含 Python 代码。代码可以采用变量、函数或已定义类的形式。文件名即为模块名。

例如,如果你的文件名是 guru99.py,模块名称将是 guru99. 使用模块功能,您可以将代码分成不同的文件,而不必将所有内容都写在一个文件中。

什么是 Python 导入模块?

在模块中,文件被视为一个模块。 Python要使用该模块,您必须使用以下方式导入它: 进口 关键字。通过导入模块,可以在另一个文件中使用文件中存在的函数或变量。其他语言也提供此功能,例如 TypeScript, Java脚本, Java, 红宝石等

如何在 Python?

现在我们将创建一个模块并将其导入到另一个文件中。

以下是创建和导入模块的流程,如屏幕截图所示:

创建并导入模块 Python

按照给定的步骤创建一个模块 Python.

用于测试代码的文件夹结构如下:

modtest/
	test.py
	display.py	

步骤1) 创建一个名为 test.py 的文件

步骤2) 在 test.py 中创建一个名为 display_message() 的函数

Def display_message():
    return "Welcome to Guru99 Tutorials!"

步骤3) 现在创建另一个文件 display.py。

步骤4) 在 display.py 文件中导入 test.py 模块文件,如下所示:

import test

导入时,无需指定 test.py,只需指定文件名即可。

步骤5) 然后你可以在 display.py 中调用 test.py 中的 display_message() 函数。你需要使用 module_name.function_name。

例如test.display_message()。

Import test
print(test.display_message())

步骤6) 执行 display.py 后,您将看到以下内容。 输出:

Welcome to Guru99 Tutorials!

导入类 Python

前面我们已经了解了一个包含函数的简单模块。现在我们将创建一个类,并在另一个文件中引用这个类。

用于测试代码的文件夹结构如下:

myproj/
	Car.py
	display.py

创建一个名为 Car.py 的文件,其中包含以下代码:

文件名:Car.py

class Car:
	brand_name = "BMW"
	model = "Z4"
	manu_year = "2020"

	def __init__(self, brand_name, model, manu_year):
		self.brand_name = brand_name
		self.model = model
		self.manu_year = manu_year

	def car_details(self):
		print("Car brand is ", self.brand_name)
		print("Car model is ", self.model)
		print("Car manufacture year is ", self.manu_year)
			
			
	def get_Car_brand(self):
		print("Car brand is ", self.brand_name)

	def get_Car_model(self):
		print("Car model is ", self.model) 

在 Car.py 文件中,有 brand_name、model 和 manu_year 三个属性。该类中定义的函数有 car_details()、get_Car_brand() 和 get_Car_model()。

现在让我们将文件 Car.py 用作另一个名为 display.py 的文件中的模块。

文件名:display.py

import Car
car_det = Car.Car("BMW","Z5", 2020)
print(car_det.brand_name)
print(car_det.car_details())
print(car_det.get_Car_brand())
print(car_det.get_Car_model())

输出:

BMW
Car brand is  BMW
Car model is  Z5
Car manufacture year is  2020
Car brand is  BMW
Car model is  Z5

因此,我们可以使用 Car 模块访问 Car.py 中的所有变量和函数。

使用 from 导入模块

您可以只导入模块的一小部分,即只导入模块中所需的函数和变量名,而不是导入整个代码。

当您只想导入特定内容时,可以使用“from”关键字导入所需内容。

所以语法是

from  module import your function_name , variables,... etc.

用于测试代码的文件夹结构如下:

modtest/
	test.py
	display.py	

test.py 文件中有两个函数,如下所示:

文件名:test.py

defdisplay_message():
	return "Welcome to Guru99 Tutorials!"
	
def display_message1():
	return "All about Python!"

现在你需要使用 display_message() 函数。你可以直接访问你导入的函数或变量,如下所示:

文件名:display.py

from test import display_message
print(display_message())

输出:

Welcome to Guru99 Tutorials!

如果您碰巧使用了函数 display_message1(),它会抛出一个错误,提示该函数未定义,如下所示:

from test import display_message
print(display_message1())

输出:

Traceback (most recent call last):
File "display.py", line 3, in <module>
print(display_message1())
Name Error: name 'display_message1' is not defined

从模块导入所有内容

Import 允许您使用 import 语句,后跟模块名称(即文件名或要使用的库),来导入整个模块。

语法:

Import module

或者使用

from module import *

用于测试代码的文件夹结构如下:

modtest/
	test.py
	display.py	

以下是test.py里面的代码细节

my_name = "Guru99"
my_address = "Mumbai"

defdisplay_message():
	return "Welcome to Guru99 Tutorials!"
	
	
def display_message1():
	return "All about Python!"

使用导入模块

仅使用导入模块名称,要引用模块内部的变量和函数,必须在其前面加上模块名称。

例如:

文件名:display.py

Import test
print(test.display_message())
print(test.display_message1())
print(test.my_name)
print(test.my_address)

模块名称 test 用于引用模块 test 内部的函数和变量。

输出:

Welcome to Guru99 Tutorials!
All about Python!
Guru99
Mumbai

使用 import *

让我们看一个例子 进口 *。 运用 进口 *,函数和变量可直接访问,如下例所示:

from test import *

print(display_message())
print(display_message1())
print(my_name)
print(my_address)

输出:

Welcome to Guru99 Tutorials!
All about Python!
Guru99
Mumbai

dir() 函数

dir() 是 的一个内置函数。 Pythondir() 返回所有属性和方法,包括给定对象的内置属性。

因此,当对模块使用 dir() 时,它会给出模块内部存在的变量和函数。

以下是一个在模块上使用 dir() 函数的示例。我们有一个名为 Car.py 的类,让我们导入 Car 并将其赋值给 dir() 函数,看看输出结果。

测试代码的文件夹结构如下:

test prop/
	Car.py
	test.py	

文件名:Car.py

class Car:
	brand_name = "BMW"
	model = "Z4"
	manu_year = "2020"

	def __init__(self, brand_name, model, manu_year):
		self.brand_name = brand_name
		self.model = model
		self.manu_year = manu_year

	def car_details(self):
		print("Car brand is ", self.brand_name)
		print("Car model is ", self.model)
		print("Car manufacture year is ", self.manu_year)
			
			
	def get_Car_brand(self):
		print("Car brand is ", self.brand_name)

	def get_Car_model(self):
		print("Car model is ", self.model) 

文件名: test.py

import Car

class_contents = dir(Car)
print(class_contents)

输出给出了类的名称和在 Car.py 中定义的所有函数。

您还可以尝试在内置模块上使用 dir() Python让我们也对……进行同样的尝试。 JSON 如下例所示,该模块将显示所有可用的属性和方法。 JSON 模块。

Import json
json_details = dir(json)
print(json_details)

输出:

['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__bu
iltins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__pac
kage__', '__path__', '__spec__', '__version__', '_default_decoder', '_default_en
coder', 'codecs', 'decoder', 'detect_encoding', 'dump', 'dumps', 'encoder', 'loa
d', 'loads', 'scanner']

包是一个目录,其中包含所有定义的模块。要制作一个 Python 解释器会将其视为一个包,因此您的目录中应该包含 `__init__.py` 文件。`__init__.py` 文件会将该目录标识为一个包。以下是我们即将使用的包的结构。

套餐 Python

该包的名称是 我的包裹要开始使用该软件包,请创建一个名为 mypackage/ 的目录。在该目录下,创建一个名为 __init__.py 的空文件。再创建三个文件 module1.py、module2.py 和 module3.py,并按照屏幕截图所示定义函数。以下是 module1.py、module2.py 和 module3.py 的详细信息。

模块1.py

def mod1_func1():
print("Welcome to Module1 function1")

def mod1_func2():
print("Welcome to Module1 function2")

def mod1_func3():
print("Welcome to Module1 function3")

模块2.py

def mod2_func1():
print("Welcome to Module2 function1")

def mod2_func2():
print("Welcome to Module2 function2")

def mod2_func3():
print("Welcome to Module2 function3")

模块3.py

def mod3_func1():
print("Welcome to Module3 function1")

def mod3_func2():
print("Welcome to Module3 function2")

def mod3_func3():
print("Welcome to Module3 function3")

已准备就绪,可以使用了。现在,可以在任意文件中调用该包,如下面的 test.py 文件所示:

这里,导入了 mypackage.module1,并赋予了别名 模组1同样地,您也可以使用 mypackage 中的其他模块 module2.py 和 module3.py。

import mypackage.module1 as mod1

print(mod1.mod1_func1())
print(mod1.mod1_func2())
print(mod1.mod1_func2())

输出:

Welcome to Module1 function1
None
Welcome to Module1 function2
None
Welcome to Module1 function2
None

我们刚刚用一个包含函数的简单模块演示了这个软件包。根据您的项目需求,您还可以创建包含子软件包的软件包,即包含定义了类的模块的子文件夹。

Python 模块搜索路径

在执行过程中,当 Python 遇到 导入模块名称解释器会尝试查找该模块。它会在内置模块列表中查找该模块,然后在 sys.path 中定义的所有目录中查找。

总而言之,解释器进行以下搜索来定位模块:

  1. 在您当前目录中。
  2. 在内置模块列表中。
  3. 位于 sys.path 目录内。

您可以通过导入 sys 模块并打印 sys.path 来获取 sys.path 的详细信息。它将为您提供如下所示的目录列表:

importsys
print(sys.path)

输出:

['Python Latest\\task2', 'Users\\AppData\\Local\\Programs\\Python\
\Python37\\python37.zip', 'Users\\AppData\\Local\\Programs\\Python\\P
ython37\\DLLs']

您还可以根据需要修改路径并保留目录。

在导入中使用模块别名

您还可以通过为其指定别名来将其转换为更短的形式。别名可以使用以下方式创建: as 关键词。

语法:

import filename as alias name

测试代码的文件夹结构如下:

Mod test/
	test.py
	display.py	

以下是 test.py 中的代码

my_name = "Guru99"
my_address = "Mumbai"

def display_message():
	return "Welcome to Guru99 Tutorials!"	
	
def display_message1():
	return "All about Python!"

现在我们将在 display.py 中使用 test.py 的别名。

Import test as t

print(t.display_message())
print(t.display_message1())
print(t.my_name)
print(t.my_address)

测试模块的别名是 t。因此,可以使用别名 t 来引用 test.py 中的函数和变量。

输出:

Welcome to Guru99 Tutorials!
All about Python!
Guru99
Mumbai

绝对导入和相对导入 Python

现在您知道如何将一个文件作为模块导入另一个文件。现在让我们看看如何管理文件夹中的文件。可以使用绝对或相对导入来导入文件夹中的文件。

假设您有项目文件夹结构,如下所示:

绝对导入和相对导入 Python

根文件夹是 myproject/。它有两个子文件夹,分别是 package1 和 package2。

文件夹 package1 包含两个模块,module1.py 和 module2.py。

文件夹package2有一个类myclass.py,一个子包subpkg,其中包含module3.py,以及最后一个module4.py。

  • 在 module1.py 中,有一个名为 myfunc1 的函数。
  • 在 module2.py 中,有一个名为 myfunc2 的函数。
  • 在 module3.py 中,有一个名为 myfunc3 的函数。
  • 在 module4.py 中,有一个名为 myfunc4 的函数。

使用绝对导入

对于绝对导入,您需要从项目根文件夹直接添加模块的完整路径。

现在让我们看看如何使用绝对导入来引用每个模块中存在的函数。

要使用函数 myfunc1,您需要按如下方式导入它:

from package1.module1  import  myfunc1
or
from package1 import module1
module1.myfunc1()  

要使用函数 myfunc3,您需要按如下方式导入它:

from package1.subpkg.module3  import  myfunc3
or
from package1.subpkg import module3
module3.myfunc3()  

使用绝对导入的优点和缺点

使用绝对导入的优点如下:

  • 变得很容易 trac将模块返回进行代码检查。
  • 易于使用且非常简单。
  • 如果项目迁移到其他路径,导入的内容仍将保持不变。

使用绝对导入的缺点

使用绝对导入的缺点如下:

  • 如果模块嵌套且模块名称很长,则导入路径可能会变得很长。

使用相对导入

假设文件夹结构如上所述,我们将看到如何使用相对导入来导入相同的文件。

在相对导入中,要导入的模块是相对于当前位置的,也就是相对于导入语句所在的位置的。

句法

在相对导入中,使用以下方式导入时需要在模块名称前添加句点 (.) ,来自.

如果模块位于当前位置的上一级,则模块名称前会有两个句点(..)。

参照上面提到的文件夹结构图,我们有以下模块及其功能,我们需要参考这些模块及其功能。

  • 在 module1.py 中,有一个名为 myfunc1 的函数。
  • 在 module2.py 中,有一个名为 myfunc2 的函数。
  • 在 module3.py 中,有一个名为 myfunc3 的函数。
  • 在 module4.py 中,有一个名为 myfunc4 的函数。

要使用函数 myfunc1,您需要按如下方式导入它:

from  .module1  import  myfunc1

要使用函数 myfunc3,您需要按如下方式导入它:

from  .subpkg.module3  import  myfunc3

相对导入的优点

  • 使用相对导入进行操作非常容易。
  • 从当前位置来看,与绝对导入相比,导入可以缩短。

相对导入的缺点

  • 使用相对导入,很难 trac返回代码所在的位置。

常见问题

Python 找不到该模块。请确认文件名拼写正确,位于系统路径或当前文件夹中,并且该软件包已安装在您的活动虚拟环境中。对于第三方模块,请运行 `pip install` 命令,并在其后加上软件包名称。

请先安装它 点子, Python 例如,可以使用包管理器安装 pandas,命令为 `pip install pandas`。安装完成后,即可像导入 pandas 一样导入它,命令为 `import pandas`。内置模块(例如 json)无需安装。

循环导入是指两个模块互相导入,导致其中一个模块只加载了一部分。解决方法是合并共享代码、在需要该模块的函数内部导入,或者导入整个模块而不是只导入模块名称。

该守卫仅在文件直接执行时运行代码,而不是在导入时运行。如果没有它,每次导入都会重新运行模块顶层语句。它将可重用函数与脚本式测试代码分开。

序号 Python importlib.reload(module) 会在执行模块一次后,将其缓存到 sys.modules 中,并在后续导入时重用该对象。要在开发过程中强制重新加载,请调用 importlib.reload(module)。

当模块名称仅在运行时才知道时(例如加载插件时),可以使用 `importlib.import_module(“name”)`。它会返回模块对象,因此您可以像使用普通导入一样访问其函数。

机器学习代码导入了 NumPy、pandas、scikit-learn、TensorFlow 和 Py。Tor将流程拆分成模块。团队还将自己的流程拆分成可重用的模块和包,然后在脚本之间导入共享的预处理和训练函数。

是的。GitHub Copilot 和智能助手会在您输入时建议导入语句,添加缺失的导入,并帮助解决导入错误。在采纳任何建议之前,请务必确认模块已安装且名称与您的环境匹配。

总结一下这篇文章: