包、模块和 pip

news/2025/3/11 13:29:29/文章来源:https://www.cnblogs.com/cyrushuang/p/18764844

模块

导入模块

导入整个模块

# 导入整个模块。
import math
print(math.log2(8))  # 这种导入方式需要使用 模块名.方法() 来调用

导入模块中特定的方法或类

# 导入模块中的指定方法。
from math import log2,log10
print(log2(8))  # 这种导入方式可以直接使用方法名来调用
print(log10(100))

导入模块中所有方法和类

# 导入 math 模块中的全部方法,使用和上面一致,直接使用方法名(不建议,容易出现命名冲突)
from math import *
print(log2(8))

给导入的方法取别名

# 给方法取别名
from math import log2 as l2g,log10 as l10g
print(l2g(8))
print(l10g(100))

给导入的模块取别名

# 给模块取别名
import math as m
print(m.log2(8))

标准库

Python 自带了许多标准库模块,这些模块提供了广泛的功能,从文件操作到网络编程,再到数据处理等。以下是一些常用的标准库模块:

  • os:提供了与操作系统交互的功能,如文件路径操作、环境变量等。
  • sys:提供了与 Python 解释器交互的功能,如命令行参数、退出程序等。
  • math:提供了数学运算函数,如平方根、三角函数等。
  • datetime:提供了日期和时间处理的功能。
  • random:提供了生成随机数的功能。
  • json:提供了处理 JSON 数据的功能。

自定义模块

自定义一个模块 my_module.py(也就是新建一个 py 文件,一个文件就是一个模块):

  • __all__:规定哪些内容可以被导入,比如这个模块的 multiply 就不允许被导入(只能限制 from 的导入方式)
  • __name__:用来测试模块功能的,导入模块内容其实是把导入的内容加载(运行)一次。__name__ 的内容不会加载
# sum 和 multiply 方法可以被导入
__all__ = ["sum"]def sum(a: int, b: int) -> int:return a + bdef multiply(a: int, b: int) -> int:return a * b# 测试模块
if __name__ == '__main__':print(sum(1, 2))print(multiply(1, 2))

使用自定义的模块 eg1:

from my_module import *print(sum(1, 2))  # 输出 3
print(multiply(1, 2))  # 报错,这个方法不允许导入

使用自定义的模块 eg2:

import my_module as mmprint(mm.sum(1, 2))  # 输出 3
print(mm.multiply(1, 2))  # 输出 2(__all__ 只能限制 from 的导入方式,直接 import 的导入方式限制不了)

包(Package)是 Python 中用于组织模块的一种方式。它允许你将多个模块组织在一个目录中,并通过层次化的命名空间来管理这些模块。包的使用使得代码结构更加清晰,特别适合大型项目。


什么是包?

  • 包是一个包含 __init__.py 文件的目录。这个文件可以是空的,也可以包含包的初始化代码。
  • 包中可以包含多个模块(.py 文件)或子包(子目录)。

例如,一个包的目录结构可能如下:

mypackage/               # 包名__init__.py           # 包的初始化文件module1.py            # 模块1module2.py            # 模块2subpackage/           # 子包__init__.py       # 子包的初始化文件module3.py        # 子包中的模块

创建包

基本结构

  1. 创建一个目录,目录名就是包名(如 mypackage)。
  2. 在该目录下创建一个 __init__.py 文件(可以是空的)。
  3. 在包目录中创建模块文件(如 module1.pymodule2.py)。

示例

假设我们创建一个名为 mypackage 的包:

mypackage/__init__.pymodule1.pymodule2.py
  • module1.py 内容:

    def greet(name):return f"Hello, {name}!"
    
  • module2.py 内容:

    def add(a, b):return a + b
    

导入包

导入整个包

import mypackage
print(mypackage.module1.greet("Alice"))  # 使用模块1中的函数
print(mypackage.module2.add(2, 3))       # 使用模块2中的函数

导入包中的特定模块

from mypackage import module1
print(module1.greet("Bob"))  # 直接使用 module1 中的函数

导入包中的特定函数

from mypackage.module2 import add
print(add(5, 7))  # 直接使用 add 函数

使用 __init__.py 简化导入

如果在包的 __init__.py 文件导入了模块的函数或类,如下:

from .module1 import greet
from .module2 import add

可以直接从包中导入类会函数:

from mypackage import greet, add
print(greet("Charlie"))  # 直接使用 greet 函数
print(add(10, 20))       # 直接使用 add 函数

子包

包可以嵌套,形成子包。子包也是一个目录,包含自己的 __init__.py 文件和模块。

例如:

mypackage/__init__.pymodule1.pysubpackage/__init__.pymodule3.py
  • module3.py 内容:

    def multiply(a, b):return a * b
    

导入子包中的模块

from mypackage.subpackage import module3
print(module3.multiply(3, 4))  # 输出 12

从子包中导入特定函数

from mypackage.subpackage.module3 import multiply
print(multiply(5, 6))  # 输出 30

__init__.py 的作用

  • 标识目录为包:Python 通过 __init__.py 文件识别一个目录是否为包。
  • 初始化包:可以在 __init__.py 中编写包的初始化代码。
  • 简化导入:通过在 __init__.py 中导入模块的函数或类,用户可以更方便地使用包的功能。

例如,在 mypackage/__init__.py 中:

from .module1 import greet
from .module2 import add
from .subpackage.module3 import multiply

用户可以直接从包中导入:

from mypackage import greet, add, multiply
print(greet("Alice"))  # Hello, Alice!
print(add(2, 3))       # 5
print(multiply(4, 5))  # 20

包的相对导入

在包内部,可以使用相对导入来引用其他模块或子包。相对导入使用 . 表示当前目录,.. 表示上级目录。

例如,在 mypackage/subpackage/module3.py 中:

from ..module1 import greet  # 从上级目录导入 module1 中的 greet 函数

包的发布与安装

如果你希望将自己的包分享给他人使用,可以将包发布到 PyPI(Python Package Index),或者直接打包成可安装的文件。

打包工具

  • setuptools:用于定义包的元数据和依赖。
  • wheel:用于生成 .whl 格式的包文件。

打包步骤

  1. 在包目录下创建 setup.py 文件:

    from setuptools import setup, find_packagessetup(name="mypackage",version="0.1",packages=find_packages(),install_requires=[],  # 依赖的其他包
    )
    
  2. 生成分发文件:

    python setup.py sdist bdist_wheel
    
  3. 上传到 PyPI:

    twine upload dist/*
    
  4. 安装包:

    pip install mypackage
    

PIP

pip 是 Python 用来安装三方包(模块或库)的工具,类似 java 的 maven 或 node 的 npm

Python2 的 2.7.9+ 版本和 Python3 的 3.4+ 版本已经内置了 pip

Python2 使用 pip Python3 使用 pip3

常用命令

pip3 install package_name  # 安装包,不指定版本(默认最新版本)
pip3 install package_name==version  # 指定版本安装包
pip3 install --upgrade package_name  # 升级包
pip3 uninstall package_name  # 卸载包
pip3 list  # 查看已安装的包
pip3 show package_name  # 查看某个已安装包的详细信息
pip3 search package_name  # 搜索包

pip3 search 已经被弃用,如果要在终端使用,需要安装 pip-searchpip-simple

官方推荐到网站上搜索,然后用命令安装,官方网址 https://pypi.org/search

命令使用示例

pip3 install requests  # 安装 requests
pip3 install requests==2.25.1
pip3 install --upgrade requests  # 升级
pip3 uninstall requests  # 卸载
pip3 show requests  # 查看详细信息
pip3 install requests -i https://pypi.tuna.tsinghua.edu.cn/simple  #  默认是从 pypi.org 下来

镜像源

pip3 config list  # 查看当前镜像源(没配置过就是空,会到 pypi.org 去下载)
pip3 config set global.index-url https://mirrors.aliyun.com/pypi/simple/  # 设置镜像地址为 阿里源
pip3 config set global.trusted-host mirrors.aliyun.com  # 信任阿里源的域名
pip3 config unset global.index-url  # 回复默认镜像源地址
  • 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
  • 阿里云:https://mirrors.aliyun.com/pypi/simple/
  • 豆瓣:https://pypi.douban.com/simple/
  • 华为云:https://repo.huaweicloud.com/repository/pypi/simple/

如果信任了自己配置的源,还是报错:

ERROR: XMLRPC request failed [code: -32500]
RuntimeError: PyPI no longer supports 'pip search' (or XML-RPC search). Please use https://pypi.org/search (via a browser) instead. See https://warehouse.pypa.io/api-reference/xml-rpc.html#deprecated-methods for more information

那就是证书问题了,我的是 mac 解决方案如下:

pip3 install certifi  # 安装证书
python3 -m certifi  # 得到证书地址
vim ~/.zhsrc  # 证书配置到环境变量中(我用的 zsh),保存文件,然后刷新一下 source ~/.zshrc 就好了
source ~/.zshrc##  我的 .zhsrc 如下
# java 17
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
export PATH=${JAVA_HOME}/bin:$PATH# java 8
#export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
#export PATH=${JAVA_HOME}/bin:$PATH# maven 3.9.9
export MAVEN_HOME=/Users/cyrus/MyApp/maven/apache-maven-3.9.9
export PATH=${MAVEN_HOME}/bin:$PATH# pip3 证书
export SSL_CERT_FILE=/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/certifi/cacert.pemsource /Users/cyrus/.dacs_run_profile

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/897233.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正交实验法python实现

1.等水平正交表 每个条件下的种类一样多 例1: 这是一个7因子2状态 列表里内部每一个[]表示一个因子,然后每个因子都有2种类型 #7因子2状态 from allpairspy import AllPairs parameters = [["Chrome", "Firefox"],#因子1有"Chrome"或"Fir…

如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统

本文将提供一个详细的示例,展示如何调用 DeepSeek 的自然语言处理 API 接口。我们将以情感分析为例,演示如何发送请求、处理响应以及处理可能的错误。我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统。陆陆续续开发了几年,从一开始的偶有用户尝试,到如今线…

使用 Pixi.js 插件实现探险者小游戏(一)

什么是 Pixi Pixi 是一个非常快的 2D sprite 渲染引擎。使用它你可以轻松的利用 JavaScript 和其他 HTML5 技术制作游戏和应用程序。 Pixi 的官网地址:https://pixijs.com/ 本游戏使用的是 Pixi 的 V4.5.5 版本,官网最新版本更新到了 V8.x,两个版本 API 相差很大,建议大家学…

【设计模式】利用组合模式带你走进树形结构的世界

概述对于这个图片肯定会非常熟悉,上图我们可以看做是一个文件系统,对于这样的结构我们称之为树形结构。在树形结构中可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子节点进行相关的操作。可以将这颗树理解成一个大的容器,容器里面包含很多的成员…

20250311

1. 沪镍还有两个上涨波段

【设计模式】从智能音箱到软件设计:探索外观模式的实际应用案例

概述 有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮手就好,其实基金就是个好帮手,支付宝里就有许多的基金,它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于…

PMC必须要懂的四个关键流程:生产、库存、交期全过程解析!

PMC(生产计划与物料控制)这个岗位,看起来就是三个字,但实际干起来,简直是让人上蹿下跳、手忙脚乱。一边要盯着生产线, 一边要和供应商、采购、销售对接,稍微一个环节没控好,就可能导致生产停滞、库存爆仓、交期延误,直接影响公司运营。 很多PMC天天在救火,但其实掌握…

JavaScript HTML DOM - 改变 HTML 功能 用法运用 详解

JavaScript中的HTML DOM提供了强大的功能来改变HTML文档的内容和结构。通过JavaScript,我们可以动态地更新网页上的文本、属性、样式以及整个HTML结构。以下是对这些功能的详细解释和用法示例: 一、改变HTML内容使用innerHTML:innerHTML属性用于获取或设置元素的HTML内容。这…

20241905 2024-2025-2 《网络攻防实践》 第2次作业

1. 实验内容 本次实验为网络信息收集技术,主要有以下五个任务选择一个DNS域名进行查询获取信息 通过IP地址查询地理位置的信息 使用nmap扫描靶机环境 使用nessus扫描靶机环境 通过搜索引擎查询自己的隐私和信息泄露问题结合实验内容阅读书本,总结知识如下:网络踩点:攻击者通…

Ubuntu 20.4安装.Net 9

20.4默认包时没有.Net 9 需要用脚本形式安装wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh给执行权限chmod +x ./dotnet-install.sh可以通过 --channel 参数更改特定主要版本来指示特定版本。 以下命令安装 .NET 9.0 SDK。./dotnet-install.sh --channel 9.…

用DeepSeek+可灵AI+剪映制作哪吒2走T台秀AI视频 (保姆级教程)

内容首发周老师的付费社群,挑其中部分内容免费同步给公号读者今天给大家分享如何利用DeepSeek这类AI工具,制作哪吒2走T台秀视频,保姆级的制作方法,简单易懂,小白也能轻松上手。 关键操作,分为四步:1、用DeepSeek生成提示词 2、用AI生成图片 3、图生视频 4、视频剪辑合并…

修改Python的pip默认安装路径

修改Python的pip默认安装路径 修改site.py文件 查看pip下载位置 python -m site修改site.py文件内容 site.py文件位置在于python安装位置打开文件修改几处内容将ENABLE_USER_SITE=None改为ENABLE_USER_SITE=True修改USER_SITE和USER_BASEUSER_SITE修改的文件内容:USER_BASE修改…