纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

python的模块在哪 python模块怎样查看

silencement   2021-04-22 我要评论

对于编译型的语言比如C#中的一个.cs文件Java中的一个.java或者编译后的.class文件可以认为是一个模块(但常常不表述为模块);对于解释型的语言会更加直观些比如PHP的.php文件在Python中就是.py文件可以认为是一个模块。在“模块”之上有“包”主要是为了方便组织和管理模块。比如C#中编译后的.dll文件(但常常不表述为包Package而是库Library)Java将.class打包后的.jar文件PHP的.phar文件(模仿Java包)在Python中一个特殊定义的文件夹是一个包可以打包为egg文件。但对于解释型语言“包”并没有编译成低级语言而后打包的意思只是更加方便模块化和管理模块间的依赖。每种编程语言对于模块和包管理都有一定的约定不了解这些约定那会给学习这种语言的带来障碍。下面我想来梳理一下Python的这些约定。

一、Python查找模块的路径

运行Python应用或引用Python模块Python解释器要有一个查找的过程。可以通过设置一个环境变量PYTHONPATH为Python增加一个搜索路径以方便查找到相关Python模块(不同的操作系统环境变量的设置稍有不同默认以下都是WIndows环境)这与众多应用程序需要设置一个系统环境变量的道理是一样的。在命令行中可以通过以下命令设置:

C:\Users\Administrator>set PYTHONPATH=E:/Project/Python/ModuleAndPackage/

进入Python环境后可以通过Python的sys.path属性获得当前搜索路径的配置可以看到之前我们设置的路径已经在当前搜索路径中了。

C:\Users\Administrator>python
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', 'E:\\Project\\Python\\ModuleAndPackage', 'C:\\Windows\\system32\\python27.zip','C:\\Python\\DLLs','C:\\Python\\
lib', 'C:\\Python\\lib\\plat-win', 'C:\\Python\\lib\\lib-tk', 'C:\\Python', 'C:\\Python\\lib\\site-packages']

>>>

也可以通过sys模块的append方法在Python环境中增加搜索路径。

>>> sys.path.append("E:\\Project\\Python\\ModuleAndPackage2")
>>> sys.path
['', 'E:\\Project\\Python\\ModuleAndPackage', 'C:\\Windows\\system32\\python27.zip','C:\\Python\\DLLs','C:\\Python\\
lib', 'C:\\Python\\lib\\plat-win', 'C:\\Python\\lib\\lib-tk', 'C:\\Python', 'C:\\Python\\lib\\site-packages','E:\\
Project\\Python\\ModuleAndPackage2']
>>>

二、Python中的模块和包

前面已经提到每个.py文件都是可以认为是一个Python模块.py文件中可以包含类、方法、变量和常量(Python还没有严格意义上的常量只是约定大写的变量作为常量)文件内也可以直接写所有的逻辑语句并在加载时从上之下直接执行这与其他解释型语言是类似的。例如我们选择在文件夹ModuleAndPackage中创建一个文本文件person.py文件即创建了一个简单的Python模块其内容如下:

# -*- coding: utf-8 -*-
ID = 1
name = "This person"
print name
def say(something):
  print name,'says', something

那么接下来我们就可以在Python环境中执行person.py。我们可以直接像执行一个批处理文件那样执行person.py在cmd命令行输入:

Python E:/Project/Python/ModuleAndPackage/person.py

本质上任何一个Python应用的入口模块都是这样被执行的(像C#和Java中的main函数)但是引用一个模块就要建立运行它的上下文环境。我们先设置一个环境变量PYTHONPATH以便Python解释器找到person.py模块然后import person模块即可访问其中的方法或变量。

C:\Users\Administrator>python
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:32:19) [MSC v.1500 32 bit (
Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import person
This person
>>> person.say("hello")
This person says hello
>>> print person.name
This person
>>>

Python需要去某些固定的路径下去查找Python模块上面我们设置在ModuleAndPackage中查找。但是这些路径下也是有目录层次的Python是如何查找子目录中的模块呢?特别是引用第三方包时我们也需要知道一定的层次关系。实际上Python通过目录和文件构建包结构并且包是层层嵌套的和目录层层嵌套是一样的这样就构成了包内的访问路径(或者命名空间也可以说Python应用的命名空间与其目录和文件结构是对应了似乎缺少了一些灵活但也更简单)。例如我们在ModuleAndPackage文件夹下创建一个文件夹animal里面创建一个文本文件pet.py其内容如下:

# -*- coding: utf-8 -*-
ID = 2
name = "This pet"
print name
def run(somewhere):
  print name,'runs', somewhere

那么如何引用pet.py这个模块呢?按照Python的约定需要在animal文件夹中创建名为__init__.py的空文本文件以标识animal文件夹是一个包。倘若animal文件夹内还有文件夹作为包也必须包含__init__.py文件。这样就层层标识了访问的路径。

>>> import animal.pet
This pet
>>> print animal.pet.name
This pet
>>> animal.pet.run("everywhere")
This pet runs everywhere
>>>

或者使用from关键字直接导入模块内的属性或方法:

>>> from animal.pet import name,run
>>> print name
This pet
>>> run("everywhere")
This pet runs everywhere
>>>

知识点扩展:

使用模块有什么好处?

当一个模块编写完毕就可以被其他地方引用。我们在编写程序的时候也经常引用其他模块包括Python内置的模块和来自第三方的模块。

模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中。但是也要注意尽量不要与内置函数名字冲突。

如果不同的人编写的模块名相同怎么办?为了避免模块名冲突Python又引入了按目录来组织模块的方法称为包(Package)。


相关文章

猜您喜欢

网友评论

Copyright 2020 www.Shellfishsoft.com 【贝软下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式