包是在模块之上的概念,为了方便管理而将多个脚本文件(模块文件)进行打包。
包是一种用点式模块名构造 Python 模块命名空间的方法。例如,模块名 A.B 表示包 A 中名为 B 的子模块。正如模块可以区分不同模块之间的全局变量名称一样,点式模块名可以区分 NumPy 或 Pillow 等不同多模块包之间的模块名称。
包其实就是文件夹,包和文件夹的一大区别在于:包内存放了一个名为__pycache__的文件夹和__init__.py文件,该文件的内容就将是包的内容。然后是一些模块文件和子目录,如果子目录中也有__init__.py,那么它就是这个包的子包了。
可以通过类似导入模块的方式导入包。导入包其实就是运行包下的__init__.py文件。如果包中没有__init__.py,则在导入包时不会有效果。但是会自动创建一个名为__pycache__ 的文件夹。
由于在导入包的时候会自动运行包内的__init__.py文件,所以一般会在该文件中写明导入包时要导入的包内其他py文件的语句。此时就可以用到相对导入了。
不建议在包内的__init__.py文件中写入其它非导入模块语句,尽量保证该文件的简洁性。
在__init__.py文件中,可以定义一个变量:__all__,一般这个变量等于该包内所有子模块名,这样在通过from 包 import *时则会查找__all__变量,并将该变量所指向的模块全部导入。
库是具有相关功能模块(包)的集合。这也是Python的一大特色之一,即具有强大的标准库、第三方库以及自定义模块。一些大型的项目要实现比较多的功能,创建了许多的包和模块,那么就可以将所有的包放在一起,形成一个库。
其实库是个抽象的概念,只要某个模块或者一组模块,开发它们的目的就是给其它模块调用的,就可以称之为库。
Python 标准库
Python语言提供了功能丰富的标准库 。这些标准库把开发中常用的功能都做好了。我们可以直接使用它们。
这些标准库里面有一部分叫做内置类型(built-in types)和内置函数(built-in functions)。内置类型和内置函数无须使用import导入,可以直接使用。内置类型有:int、float、str、list、tuple等。
还有些标准库,需要使用import导入,才能使用。常见有 sys, os, time, datetime, json,random 等。
我们要结束Python程序,就可以使用sys库里面的exit函数。
我们要得到字符串形式的当前日期和时间,可以使用datetime库。
我们要获取随机数字,可以使用random库。
练习
1、利用dir、help探索上述标准库
2、使用不同的方式导入上述标准库
同样的,和模块一样,来自网上其它人员编写的模块组合而成的库称之为第三方库,Python强大之处不仅仅是系统自带的标准库,还有来自网上由其它人员编写的大量实用的第三方库,下载安装之后可以极大的提高编程效率,让我们不必为了编写某些特定的功能去重复造轮子。
要使用第三方库我们需要安装到本地。一般有以下几种方式安装第三方库:
这也是最简单、最常用的一种方式。
1、运行cmd命令打开cmd窗口。
2、在cmd窗口中输入命令:pip install 第三方库名[==版本号]
3、按下回车后会自动到PYPI收集并安装第三方库。安装的路径为Python\Lib\site-packages,这个文件夹就是Python专门用来下载并安装第三方库的。
1、直接到已经安装好第三方库的电脑上,找到第三方库安装的文件路径,将库相关的文件夹(一般为库同名的文件夹以及库名-版本号.dist-info文件夹)复制
2、粘贴到另一台电脑相应的文件夹中。
注意:这种方法是电脑没有网络无法从网上下载的一种替代方式,不推荐使用。并且要注意两台电脑上安装的Python版本最好要一致。
1、直接打开PYPI并搜索要安装的库名。
2、找到后点击库主页左上方的Download files。然后在右侧找到适合自己电脑系统的安装文件。注意,这个时候下载的安装文件是.whl格式的。
3、打开cmd窗口并将工作目录切换到刚才下载的whl安装文件所在的目录中
4、通过命令pip install xx.whl即可完成安装。
1、打开PyCharm,然后点击文件\设置\项目:项目名\Python解释器,然后点击+

2、在弹出的对话空中,在上方输入要安装的库名:requests,找到之后点击左下方的安装软件包后。软件会自动下载并安装。

练习
通过不同的方式分别安装:pandas、requests、pygame、numpy库
1、为了保证运行效率,每次解释器会话只导入一次模块。如果更改了模块内容,必须重启解释器;仅交互测试一个模块时,也可以使用 importlib.reload(),例如:
>>> import importlib
>>> importlib.reload(模块名)
2、可以使用as关键字将最后导入的内容和as后的名称进行绑定。例如:
import math as mt # 用mt代表导入后的math模块名
from math import sqrt as st # 用st代表导入的sqrt函数
模块名、变量、函数、类等都可以通过as和其它内容进行绑定。这么做的好处有几点:
尽管有许多关于该主题的SO线程,但我在解析CSV时遇到了问题。它是从AdwordsKeywordPlanner下载的.csv文件。以前,Adwords可以选择将数据导出为“纯CSV”(可以使用RubyCSV库进行解析),现在选项是AdwordsCSV或ExcelCSV。这两种格式都会导致此问题(由终端session说明):file=File.open('public/uploads/testfile.csv')=>#file.read.encoding=>#require'csv'=>trueCSV.foreach(file){|row|putsrow}ArgumentError:in
关于在模块或库中使用“SELF”的快速问题。基本上,“SELF”的范围/上下文是什么,因为它属于模块或库,如何正确使用它?有关我所说内容的示例,请查看随“restful_authentication”一起安装的“AuthenticatedSystem”模块。注意:我知道“self”在其他语言中等同于“this”,以及“self”如何在类/对象上运行,但是在模块/库的上下文中,“self”没有任何意义。那么在没有类的模块之类的东西中,self的上下文是什么? 最佳答案 在模块中:当您在实例方法中看到self时,它指的是包含该模块的类的
文章目录创建工作区目录创建包和节点colconbuild编译CMakeLists.txt文件find_packageadd_executablepackage.xml面相过程的方式生命一个节点以面向对象的方式创建一个节点创建工作区目录mkdir-p~/ros2_ws/srccd~/ros2_ws我们创建了两个目录,ros2_ws和在他下面的子目录,运行编译的目录在ros2_ws目录下,src目录下是我们生成的ros的包,我们自己编写的代码也都早src目录下,colconbuild编译之后会在ros2_ws目录下生成一下文件,运行程序也是在ros2_ws这个目录下。创建包和节点使用ros2pkg
有什么方法可以设置默认的System.Web.Optimization.ScriptBundle来生成sourcemaps对于捆绑和缩小的文件?除了必须在每次构建之前预先生成包和源映射之外,是否有等效的解决方案? 最佳答案 似乎与此同时,某个好心人发布了一个自定义类,它完全可以满足我的需要。您可以在https://github.com/benmccallum/AspNetBundling获得他的来源. 关于javascript-协调ASP.NET脚本包和源映射,我们在StackOverf
新安装visualstudio2022后,在一个简单工程上编译测试中,遇到标准头文件(new.h)报错,详情如下:已启动生成…1>------已启动生成:项目:MFCApplication1,配置:Debugx64------1>pch.cpp1>D:\ProgramFiles\MicrosoftVisualStudio\2022\Community\VC\Tools\MSVC\14.31.31103\atlmfc\include\afx.h(62,11):fatalerrorC1083:无法打开包括文件:“new.h”:Nosuchfileordirectory1>已完成生成项目“MFCAp
你如何处理包依赖?例如,假设我有一个要发布供所有人使用的包,并且在开发该包时我使用的是第3方包。对于这个例子,假设github.com/gorilla/websocket是一个,github.com/sirupsen/logrus是另一个。go工具会自动看到我的“includes”并获取这些包吗?我是否必须在我的描述中说明您需要在我的包运行之前安装这些?我是否应该以某种方式将它们包含在我自己的资源中(我对此表示怀疑但不会遗漏任何东西)?推荐的处理方法是什么?需要注意的一件事是我使用的是Go1.11模块系统,所以我的依赖项确实列在我的go.mod文件中。够了吗?
所以我有点想知道这里的最佳实践是什么。我有一个包含多个子包的应用程序,有些需要访问主包中的记录器,因为我使用带有颜色和时间戳等的自定义记录器。是通过像这样注入(inject)它来实现这一目标的唯一方法吗?(假设Handler在一个名为command的子包中)typeHandlerstruct{loggerlogging.Logger}funcNewHandler(loggerlogging.Logger)Handler{returnHandler{logger:logger,}}handler:=command.NewHandler(logger)我遇到的这个问题是测试变得很烦人,因为
需要将HTML内容作为一个值存储在资源包中(XML格式)。HTML标记与XML标记冲突。如何在不使用字符实体引用的情况下存储HTML字符串() 最佳答案 放在and]]>之间. 关于JavaXML资源包和HTML内容,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6124546/
我正在尝试从命令行使用cl.exe构建Windows通用应用程序。我已经从其中一个VisualStudio模板粘贴了命令行参数,但我仍然无法使其正常工作。我收到以下错误:F:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\INCLUDE\vccorlib.h(348):errorC3940:'EventRegistrationToken':identifiernotfound-possiblemismatchbetweencompilerandlibraryversions.Pleaseensurevccorlib.h/.lib,vcco
我们有一个C++库。它具有四个对初始化顺序敏感的静态对象(其中两个是标准库中的字符串)。我们正在使用init_seg(lib)来控制库中C++静态对象的初始化顺序。正在使用它的源文件被编译并在动态链接库或静态库中使用。根据init_seg的文档:...Itisparticularlyimportanttousetheinit_segpragmaindynamic-linklibraries(DLLs)orlibrariesrequiringinitialization.(emphasismine)VisualStudio解决方案分为四个项目。一种是静态库,或者是动态库,一种是静态库的测