python3怎么下载模块_python3 模块和包

本文围绕Python展开,介绍了模块、包、库和框架的概念,详细阐述第三方库的下载安装方式,包括源码安装和包管理安装,还提及在PyCharm中的安装方法。同时讲解了模块和包的导入规则、搜索路径,以及sys模块、__name__属性、dir()函数的使用,最后补充了三方包版本规则和发布方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.模块(Module)和包(Package)

1.模块:一个包含所有你定义的函数和变量的文件,其后缀名是 .py ,一个.py文件就是一个模块

2.包:一定包含 __init__.py模块 的文件夹,一般也会包含其他一些模块和子包

3.库(lib):库是完成一定功能的代码集合,具体表现可以是包,也可以是一个模块

4.框架(framework):为解决一个开放性问题而设计的具有一定约束性的支撑结构

5.python内置了一些库,除此之外,还有其他人自己做的一些库,称之为第三方库

6.一般把第三方库放在.../python3/lib/site_packages中

二.第三方库的下载和安装

1.安装第三方库实质上是下载并使用别人写的代码

2.常见的第三方库的格式:源码(Source)(压缩包,需先解压,得到包含setup.py文件夹);egg(本质是压缩包);whl(本质也是压缩文件)

3.安装方式:

(1)源码安装(本地安装):手动下载,再安装到本地;

(2)包管理安装(远程安装):通过命令使自动化的为用户安装管理包和模块

4.源码安装

(1)到对应库托管网站下载所需要的文件,https://pypi.org/或https://www.lfd.uci.edu/~gohlke/pythonlibs/等

(2)下载的文件要对应自己python的版本,还要选择32位还是64位安装的python的系统

(3)打开命令行(win+R cmd):切换到下载的文件所在的目录 cd /d

(4)对于带setup.py的文件(源码文件),输入命令:python setup.py install

注意:若没有setuptools包,需手动下载安装,再利用setuptools安装其他使用setuptools打包的包

(5)对于 .egg文件使用easy_stall安装,输入命令:easy_install xxx.egg(完整文件名称)

(6)对于whl文件可以使用easy_stall如上安装,也可以使用pip安装,输入命令:pip install xxx.whl(完整文件名称)

5.远程安装easy_install和pip,需先知道要安装的库名

6.easy_install:http://peak.telecommunity.com/DevCenter/EasyInstall

(1)是setuptools的自带安装脚本,用于安装.egg文件

(2)在多个python版本的切换安装:安装到3.6python中:easy_install-3.6 xxx

(3)安装指定版本包:easy_install  “ 库名  限定符(,<=,>=,==)   版本 ”; 例:easy_install  “ request >1.0,<2.0 ”   安装大于1.0并且小于2.0的版本

(4)升级三方包:easy_install --upgrade (-U)  库名,例如:easy_install --upgrade requests

(5)卸载三方包:(1)手动卸载删除对应的包记录或删除在easy-install.pth中的包记录(2)easy_install -m 包名称:自动删除在easy-install.pth中的包记录

(6)-m的真正含义:支持多版本,可在运行时进行切换,使用:>>>import pkg_resources   >>>pkg resources.require("对应版本的包名")>>import 对应版本的包

(7)easy_install.pth文件:记录当前通过easy_install已经安装的模块(多个版本的模块,只记录最后一次安装的);用于导入模块时的路径检索

(8)切换三方安装源:在easy_install修改文件setuptools\command\easy_install.py文件中搜索pypi.python.org找到对应地址并修改

7.pip:http://pip.pypa.io/en/stable/

(1)是pip库中的安装脚本,用于安装.whl文件

(2)切换安装包安装源:

一次性修改:pip install --index -url https://..../包名(指定检索)或pip install -extra-index-url https://..../包名(拓展检索)

永久性修改

(3)安装在不同的python版本环境中(1)python m pip install xxx或python3 m pip install xxx(2)py -2 m pip install xxx或py -3 m pip install xxx

(4)查看包:已经安装好的包:pip list;不被依赖的包:pip list  --not-required ;过期的包:pip list --outdated;某个包的具体信息:pip show xxx

(5)搜索包:pip search xxx或pip search -i 检索地址 xxx

(6)安装指定版本包:pip install “库名 限定符(,<=,>=,==) 版本”; 例:pip install “request >1.0,<2.0”安装大于1.0并且小于2.0的版本

(7)升级三方包:pip install --upgrade (-U) 库名,例如:pip install --upgrade requests注:pip的升级是先卸载当前版本,在下载安装最新版本,如果库存在,直接执行安装命令并不会更新库

(8)卸载三方包:pip uninstall xxx

(9)生成冻结需求的文本:把当前安装的三方包记录存储在指定的文件当中:pip freeze  > C:\Users\11373\Desktop\bao.txt生成存储包信息的文本文档

pip install -r bao.txt下载并安装文本文档中的包

8.pycharm中安装:Settings---project ---project interpreter---界面右边列出不同环境下的包,右边操作:+增加 -删除 |更新----对应的包install package----manage repositories(管理库的链接地址)

9.总结

安装一个库:

(1)pycharm中搜索安装

(2)命令行 pip install xxx

(3)如果上面都出现问题,https://www.lfd.uci.edu/~gohlke/pythonlibs/下载相应库到本地,命令行 pip install xxx.whl

三.导入模块和包

1.使用(from  A )import B (as C) 的形式进行导入:从A导入B到当前位置,使用别名C。

(1)from  包  import  单个或多个模块

(2)from  模块  import  模块资源(比如:函数,属性等)

(3)要保证面向原则,即只能导入自己的下一级,不能从包中导入模块的资源或从大包中导入小包的模块

(4)import * 表示导入能匹配到的所有资源,存放在__all__=[ ](列表中每个元素都是字符串)

(5)import和from...import...不存在哪种更省内存,都创建了模块对象,区别在于把哪一部分内容拿到当前位置来用

(6)导入包时如果只写包名,默认不会导入所有模块,应在init模块中再次导入需要的模块或以from...import...的形式导入

2.导入时,需要把命令放在脚本的顶端

3.对同一库的导入只会被执行一次,不管你有多少个import。这样可以防止库被一遍又一遍地执行

4.导入模块时,会自动执行该模块;导入包时,会自动执行对应的init.py文件

5.执行import语句时会自动搜索,来确定该包或模块存在

(1)查找路径顺序是:内存中已经加载的模块 -> 内置模块 -> sys.path路径(导入模块的环境变量)中包含的模块

(2)当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入

(3)当安装第三方模块的时候,如果不是按照标准方式安装,则为了能够引用(import)这些模块,必须将这些模块的安装路径添加到sys.path中

(4)只要包或模块放在sys.path路径中,都可以import使用它

6.第一次导入和第二次导入

(1)第一次导入:在自己当下的命名空间执行所有代码,创建一个模块对象,并将模块内所有顶级变量以属性的形式绑定在模块对象上,在import的位置,引入import后面的变量名称到当前命名空间;第二次导入时,直接执行上述最后一步

按照模块检索路径先后顺序查找:1.内置模块  2.sys.path   3.自己追加路径

(2)追加路径的方式:1.sys.path.append()只限本次添加路径; 2.修改环境变量,仅仅在shell中有效;  3.添加.pth文件

1 importsite

2

3 print(site.getsitepackages())#查找特殊路径,可以用来存放.pth文件

4 #在.pth配置文件中添加路径,系统会自动识别

.pth

(3)pycharm中修改路径:Settings--Project Interpreters(*的show all)--点击Project Interpreters界面右边的最后一个标识show path---在Interpreter Paths界面中点加号添加路径

(4)sys.path优先级:当前目录---python环境变量中配置的路径----pthon的安装路径-----安装路径下的.pth文件-----lib库(lib\\site-packages)----lib库中配置的.pth文件---pycharm我们加的路径

(5)第二次导入:从已经加载过的模块中去找,查看已加载模块:sys.modules

7.导入模块的常见场景:局部导入、覆盖导入(sys中路径前的覆盖路径后的;内置的覆盖自定义的)、循环导入(A导入B,B导入A)、可选导入(两个功能相近的包,根据需求优先选择一个导入try..except...)、包内导入(包外:绝对导入from a import b,包内:相对导入from ../. inport b)

8.当我们尝试去使用解释器去执行某一个py文件的时候,那他就会确定当前文件所在的目录,然后,再把这个目录添加到sys.path。添加过后,再往后,基本上这个sys.path里面的内容已经确定

8.导入模块和导入包

1 #目录:

2 # 导入模块和包---

3 # |

4 # 上级包、上级模块、导入模块和包的init模块-----

5 # |

6 # 同级包、同级模块、上级包的init模块、test模块--------

7 # |

8 # 下级包、下级模块、同级包的init模块-----

9 # |

10 #最下级模块、下级包的init模块

11

12 #以test模块为执行模块导入相应的模块

13 #导入同级模块

14 import 同级模块#直接导入单个模块并执行该模块

15 print(同级模块.name)#打印模块中的name属性

16 print('*'*30)

17

18 #导入下级模块

19 # import 下级模块 #不能直接导入同级包下面的模块No module named '下级模块'

20 # print(下级模块.name)#打印模块中的name属性

21 #修改方法:

22 import 同级包.下级模块#导入同级包的下级模块,执行包的__init__模块和导入的模块

23 print(同级包.下级模块.name)#打印该模块的name属性

24 print('*'*30)

25

26 #导入下下级模块

27 # import 下级包.最下级模块#No module named '下级包'

28 # print(下级包.最下级模块.name)

29 # import 同级包.最下级模块#No module named '同级包.最下级模块'

30 # print(同级包.最级模块.name)

31 #修改:

32 import同级包.下级包.最下级模块

33 print(同级包.下级包.最下级模块.name)

34 print('*'*30)

35

36 #导入上级模块

37 # import 上级模块#不能直接导入同级包上面的模块No module named '上级模块'’

38 # print(下级模块.name)#打印模块中的name属性

39 #修改方法

40 import 导入模块和包.上级模块#导入再上级包下的上级模块,执行包的__init__模块和导入的模块

41 print(导入模块和包.上级模块.name)

42 ----------------------------------------------

43 执行同级模块

44 同级模块

45 ******************************

46 同级包的init模块

47 执行下级模块

48 下级模块

49 ******************************

50 下级包的init模块

51 执行最下级模块

52 最下级模块

53 ******************************

54 导入模块和包

55 执行上级模块

56 上级模块

导入模块

1 #导入包

2 import 同级包 #导入同级包直接导入

3

4 # print(同级包.下级模块.name)#module '同级包' has no attribute '下级模块'

5 # 修改:若要使用包下的某个模块,可以在对应init模块中导入相应的模块

6

7 # import 上级包#No module named '上级包'

8 # import 下级包No module named '下级包'

9 #为什么找不到对应的包:因为是在内置模块和sys.path中找,在对应的路径中并没有这个包

10 # 解决:

11 importsys

12 print(sys.path)

13 sys.path.append('E:\\python_work\\导入模块和包')

14 sys.path.append(r'E:\python_work\导入模块和包\上级包\同级包')

15 import上级包

16 import下级包

17

18

19 import导入模块和包

20 ----------------------------------------------------------

21 同级包的init模块

22 ['E:\\python_work\\导入模块和包\\上级包', 'E:\\python_work', 'E:\\python3.6.4\\python36.zip', 'E:\\python3.6.4\\DLLs', 'E:\\python3.6.4\\lib', 'E:\\python3.6.4', 'C:\\Users\\11373\\AppData\\Roaming\\Python\\Python36\\site-packages', 'E:\\python3.6.4\\lib\\site-packages', 'E:\\python3.6.4\\lib\\site-packages\\requests-2.18.4-py3.6.egg', 'E:\\python3.6.4\\lib\\site-packages\\pymongo-3.6.1-py3.6-win32.egg', 'E:\\python3.6.4\\lib\\site-packages\\easygui-0.98.1-py3.6.egg', 'E:\\python3.6.4\\lib\\site-packages\\jedi-0.12.0-py3.6.egg', 'E:\\python3.6.4\\lib\\site-packages\\parso-0.2.0-py3.6.egg', 'E:\\pycharm\\PyCharm 2017.3.3\\helpers\\pycharm_matplotlib_backend']

23 上级包的init模块

24 下级包的init模块

25 导入模块和包

导入包

9.导入包

(1)包要想能够使用,__init__.py文件得添加一句from . import * ,意思是从当前包的目录导入所有 模块文件,因为包的导入会首先执行__init__.py

(2) 变量__all__包含一个列表,起到过滤变量、函数和类的作用,表示允许哪些可以被导入

四.sys模块(与系统功能有关的模块)

1.sys.path一个目录列表,供Python从中查找第三方扩展模块

1 importsys

2 #sys.path获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到

3 print(sys.path)

4 -------------------------------------------------------------------------------

5 ['E:\\python_work', 'E:\\python_work',

6 'E:\\python3.6.4\\python36.zip',

7 'E:\\python3.6.4\\DLLs',

8 'E:\\python3.6.4\\lib',

9 'E:\\python3.6.4',

10 'E:\\python3.6.4\\lib\\site-packages',

11 'E:\\pycharm\\PyCharm 2017.3.3\\helpers\\pycharm_matplotlib_backend']

sys.path

2.sys.argv

1 importsys

2 #在外部向程序内部传递参数sys.argv

3 print(sys.argv[0])# 获取脚本名字

4 print(sys.argv)

5

6 for i insys.argv:

7 print(i) # 获取参数列表

8

9 print(len(sys.argv)-1)# 统计参数个数

10 ------------------------------------

11 E:/python_work/python.3.11.py

12 ['E:/python_work/python.3.11.py']

13 E:/python_work/python.3.11.py

14 0

sys.argv

五.__name__属性

1.a模块被另一个程序第一次引入时,a模块主程序将运行

2.用__name__属性来使程序块仅在模块自身运行时执行,被引用时不执行

3.每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入

4.一个py文件直接以脚本的形式进行执行,它的名字就是__main__;若是使用模块的形式进行加载的,他的名字是由加载的路径决定的:包名.子包名.模块名    顶级名称

1 defdayin():

2 print('dayingg')

3 dayin()

4 if __name__ == '__main__':

5 print('程序自身在运行')

6 else:

7 print('我来自另一模块')

8 ---------------------------------------------------------

9 dayingg

10 程序自身在运行

dayin.py

1 importdayin

2 ---------------------------------------------

3 dayingg

4 我来自另一模块

另一文件中

六.dir() 函数

1.内置的函数dir()可以找到模块内定义的所有名称。以一个字符串列表的形式返回

2.如果没有给定参数,那么 dir() 函数会罗列出当前定义的所有名称

1 a = [1, 2, 3, 4, 5]

2 importdayin

3 print(dir(dayin))# 得到一个指定模块中定义的名称

4 print(dir()) # 得到一个当前模块中定义的属性列表

5 c=5 # 建立一个新的变量 'a'

6 print(dir())

7 del c # 删除变量名a

8 print(dir())

9 -----------------------------------------------------

10 dayingg

11 我来自另一模块

12 ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'dayin']

13 ['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'dayin']

14 ['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'c', 'dayin']

15 ['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'dayin']

dir()

七.补充

1.三方包的版本规则n1.n2.n3

(1)n1:修改了之前的功能或者添加了一个新功能(修改了之前的api)n1+1

(2)n2:新增了某个小功能 n2+1

(3)n3:当版本的bug修复之后 n3+1

2.发布一个包:https://python_packaging.readthedocs.io/en/latest/minimal.html

(1)注册账号pypi

(2)环境准备

(3)发布前的准备

创建一个项目并编译生成发布包;

具体的setup.py脚本文档描述:https://docs.python.org/2/distutils/setupscript.html和https://packaging.python.org/tutorials/distributing-packages/

(打包)命令行执行setup.py:切换包所在目录------python setup.py sdist(自动在包中生成dist文件,里面有压缩好的文件)

readme.rst:http:\\zh-sphinx-doc.readthedocs.io/en/latest/contents.html

license.txt:https://choosealicense.com/

manifest.in:https://docs.python.org/3/distutils/sourcedist.html#specifying-the-files-to-distribute

二进制的发行包:解压直接拷贝到指定目录

windows下的安装文件直接双击执行安装

上传到pypi:命令行操作:1.切换目标目录,2.twine upload 要上传的文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值