python怎么安装模块-Python模块及其导⼊
⼀、模块
1、模块的定义:
为了编写可维护的代码,我们把很多函数分组,分别放到不同的⽂件⾥,这样,每个⽂件包含的代码就相对较少,
很多编程语⾔都采⽤这种组织代码的⽅式。在Python中,⼀个.py⽂件就称之为⼀个模块(Module)。
2、使⽤模块的好处:
<1> 提⾼了代码的可维护性,其次,可以被其他地⽅引⽤。
<2> 使⽤模块可以避免函数名和变量名冲突。
3、模块分类
分为三种:
<1> 内置标准模块(⼜称标准库)执⾏help('modules')查看所有python⾃带模块列表。
<2> 第三⽅开源模块,可通过pip install 模块名 联⽹安装。
<3> ⾃定义模块
4、模块调⽤的⽅法
import module
from module import xx
import xx as rename
import
注意:模块⼀旦被调⽤,就相当于执⾏了另⼀个py⽂件⾥的代码。
5、⾃定义模块
所谓⾃定义模块,就是创建了⼀个.py⽂件,就可以称之为模块,可以在另⼀个程序⾥导⼊。
6、模块查路径
⾃定义模块只能在当前路径下的程序⾥才能导⼊,换⼀个⽬录再导⼊⾃⼰的模块就报错说不到了, 这是为什么?
这与导⼊路径有关
import sys
print(sys.path)
输出:['',
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip','/Library/Frameworks/Python.framework/Version s/3.6/lib/python3.6',
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-
dynload','/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages']
python解释器会按照列表顺序去依次到每个⽬录下去匹配你要导⼊的模块名,只要在⼀个⽬录下匹配到了该模块名,就⽴刻导⼊,不再继续往后。
注意:列表第⼀个元素为空,即代表当前⽬录,所以你⾃⼰定义的模块在当前⽬录会被优先导⼊。
7、开源模块安装与使⽤
1.直接在上⾯这个页⾯上点download,下载后,解压并进⼊⽬录,执⾏以下命令完成安装
编译源码 python setup.py build安装源码 python setup.py install
2、直接通过pip安装pip3 install paramiko #parmiko 是模块名
pip命令会⾃动下载模块包并完成安装,软件⼀般会被⾃动安装你python安装⽬录的这个⼦⽬录
⾥/your_python_install_path/3.6/lib/python3.6/site-packages
pip命令默认会连接在国外的python官⽅服务器下载,速度⽐较慢,你还可以使⽤国内的⾖瓣源,数据会定期同步国外官⽹,速度快好多
⼆、包(package)
└── my_proj
├── crm #代码⽬录
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── manage.py
└── my_proj #配置⽂件⽬录
├── settings.py
├── urls.py
像上⾯这样,⼀个⽂件夹管理多个模块⽂件,这个⽂件夹就被称为包。
crm/views.py内容
def sayhi():
print('hello world!')
通过manage.py调⽤
from crm import views
views.sayhi()
执⾏manage.py,pthon3中可以执⾏,但python2会出问题。包就是⽂件夹,但该⽂件夹下必须存在 __init__.py ⽂件, 该⽂件的内容可以为空。__int__.py⽤于标识当前⽂件夹是⼀个包。
在crm⽬录下创建⼀个空⽂件__int__.py ,再执⾏⼀次就可以了。
注意,在python3⾥,即使⽬录下没__int__.py⽂件也能创建成功,猜应该是解释器优化所致,但创建包还是要记得加上这个⽂件 。
跨模块导⼊
如何实现在crm/views.py⾥导⼊proj/settings.py模块呢?
直接导⼊会报错不到模块。
因为路径不到,proj/settings.py 相当于是crm/views.py的⽗亲(crm)的兄弟(proj)的⼉⼦(settings.py),
settings.py算是views.py的表弟啦,在views.py⾥只能导⼊同级别兄弟模块代码,或者⼦级别包⾥的模块,
根本不知道表弟表哥的存在。该怎么做呢?
添加环境变量,把⽗亲级的路径添加到sys.path中,就可以了,这样导⼊ 就相当于从⽗亲级开始模块了。
#crm/views.py中添加环境变量
importsys ,os
BASE_DIR= os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #__file__的是打印当前被执⾏的模块.py⽂件相对路径,注意是相对路径
print(BASE_DIR)
sys.path.append(BASE_DIR)from proj importsettingsdefsayhi():print('hello world!')
注意;此时在proj/settings.py写上import urls会有问题, 因为现在的程序⼊⼝是views.py , 你在settings.py导⼊import urls,
其实相当于在crm⽬录urls.py,⽽不是proj⽬录,若想正常导⼊,要改成如下:
from proj import urls #proj这⼀层⽬录已经添加到sys.path⾥,可以直接到
print('in proj/settings.py')
三、绝对导⼊和相对导⼊
├── __init__.py
├── crm
│ ├──__init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ ├── views.py#from ..proj import settings
├── manage.py
└── proj
├──__init__.py
├── settings.py#from .import urls
├── urls.py
└── wsgi.py
#views.py⾥代码
from ..proj importsettingsdefsayhi():print('hello world!')print(settings.DATABASES)
这样执⾏会报错。
在涉及到相对导⼊时,package所对应的⽂件夹必须正确的被python解释器视作package,⽽不是普通⽂件夹。
否则由于不被视作package,⽆法利⽤package之间的嵌套关系实现python中包的相对导⼊。
⽂件夹被python解释器视作package需要满⾜两个条件:
⽂件夹中必须有__init__.py⽂件,该⽂件可以为空,但必须存在该⽂件。
不能作为顶层模块来执⾏该⽂件夹中的py⽂件(即不能作为主函数的⼊⼝)。
所以这个问题的解决办法就是,既然你在views.py⾥执⾏了相对导⼊,那就不要把views.py当作⼊⼝程序,
可以通过上⼀级的manage.py调⽤views.py。
from .. import models会报错的原因是,这句代码会把manage.py所在的这⼀层视作package,但实际上它不是,因为package不能是顶层⼊⼝代码,若想不出错,只能把manage.py往上再移⼀层。
#正确的代码⽬录结构如下
packages/├──__init__.py
├── manage.py#from import views
python默认安装路径└── my_proj
├── crm
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ ├── views.py#from . import models; from ..proj import settings
└── proj
├──__init__.py
├── settings.py
├── urls.py
└── wsgi.py
再执⾏manage.py就不会报错了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论