Python导入

时间:2020-02-23 14:42:48  来源:igfitidea点击:

Python import语句用于导入要在程序中使用的模块。
Python模块是包含实用程序功能,类型,类等的python脚本。
我们在python程序中定期使用许多模块,例如sys,os,collection等。

Python导入

如果要导入python内置模块或者使用程序包管理器(如PIP)安装的任何第三方模块,则可以非常轻松地在程序中导入和使用它们。

import collections
import sys

Python在sys.path属性中寻找模块和包。
该路径始终包含执行脚本的当前目录,因此可以直接导入当前目录中的任何模块。

Python导入区分大小写,因此" import sys"和" import Sys"正在寻找要导入的不同模块。

Python首先在内置模块中寻找模块。
如果找不到,它将在当前目录中搜索模块。
因此,如果我们的math.py文件与主脚本位于同一目录中,那么如果内置模块中没有'math'模块,则在调用'import math'时将加载该文件。
您可以使用sys.builtin_module_names获得内置模块的列表。
下图显示了我的python安装中的内置模块。

Python从模块导入类/函数

我们也可以从模块导入特定的类。
这样,我们可以导入模块的特定部分并使用它。
这也有助于编写流畅的代码。
我们可以在导入语句中使用from关键字来实现。

from collections import namedtuple
from os import path

Python导入用户定义的模块

创建python脚本时,可以使用其名称将其导入另一个python脚本中。
假设我们具有以下目录结构以及多个python脚本。

我们在" utils.py"文件中定义了以下函数。

def add(i, j):
  return int(i) + int(j)

def uppercase(s):
  return str(s).upper()

我们可以将其导入python_import_examples.py并使用其功能。

import utils

print(utils.add(10,10))
print(utils.uppercase('java'))

输出:

20
JAVA

Python导入为

我们可以使用import as语句为导入的模块定义自己的名称。

# python import as
import utils as u

print(u.add(10,10))
print(u.uppercase('java'))

从另一个目录导入Python

如果我们要导入的python脚本位于同一目录中,那么我们可以像内置模块一样轻松地导入。
但是,如果python脚本存在于另一个目录中,那么我们可以使用importlib库将其作为模块导入。

假设我们的strutils.py具有以下功能:

def uppercase(s):
  return str(s).upper()

def lowercase(s):
  return str(s).lower()

现在,让我们看看如何使用importlib将这个python脚本导入到我们的示例中。

# Refer: https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly
# Refer: https://stackoverflow.com/questions/4383571/importing-files-from-different-folder
import importlib, importlib.util

def module_from_file(module_name, file_path):
  spec = importlib.util.spec_from_file_location(module_name, file_path)
  module = importlib.util.module_from_spec(spec)
  spec.loader.exec_module(module)
  return module

strutils = module_from_file("strutils", "../mymodule/strutils.py")

print(strutils.uppercase('java'))
print(strutils.lowercase('DATA'))

Python从另一个文件导入类

我们也可以使用importlib导入脚本并使用其中定义的类。
假设我们在" myclasses.py"文件中定义了" Person"和" Student"类。

class Person:  
	name = ""  
	  
	def __init__(self, personName):  
		self.name = personName  

	def showName(self):  
		print(self.name)  

class Student(Person):
	id = 0
	
	def __init__(self, studentName, studentId):  
		Person.__init__(self, studentName)
		self.id = studentId  

	def getId(self):  
		return self.id

这是示例代码,其中我使用较早定义的函数来导入此脚本并使用其类。

#python import class from another file
mc = module_from_file("myclasses", "../mymodule/myclasses.py")

p = mc.Person('hyman')
p.showName()

s = mc.Student('David',25)
s.showName()
print(s.getId())

请注意,我们可以为要导入的模块保留任何名称,类似于使用" import as"语句。

还有一种使用sys模块从另一个目录导入脚本的方法。

import sys
sys.path.append("../mymodule/")
from myclasses import Person as PC
p = PC('Meghna')
p.showName()

当我们只想从导入的文件中导入特定的类和函数时,这很有用。
而且,使用此代码更容易理解。