Python 模块详解

模块概念与分类

模块(Module) 一个 Python 文件(.py)就是一个模块,内部可包含 变量、函数、类 等,可供其他模块或文件导入使用。

模块分类:

  1. 内建模块(builtins) 由 Python 解释器内置,随时可用,如 len()abs() 等。
  2. 标准库模块 Python 安装时自带,如 mathtime 等。
  3. 第三方模块 需手动安装,例如 requestsnumpy
  4. 用户自定义模块 自己编写的 .py 文件,或可封装为第三方包发布。

pip 模块管理

常用 pip 命令:

功能 命令示例
安装模块 pip install module_name
查看所有模块 pip list
更新单个模块 pip install --upgrade module_name
更新所有模块(需 pip-review) pip-review --local --interactive
指定镜像源安装 pip install module_name -i https://pypi.tuna.tsinghua.edu.cn/simple

国内镜像源常用:

  • 阿里云: http://mirrors.aliyun.com/pypi/simple/
  • 清华: https://pypi.tuna.tsinghua.edu.cn/simple/
  • 豆瓣: http://pypi.douban.com/simple/
  • 中国科技大学: https://pypi.mirrors.ustc.edu.cn/simple/

永久更改镜像:

  • Linux:编辑或新建 ~/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
  • Windows:在 C:\Users\你的用户名\pip\pip.ini 写入:
[global]
timeout = 6000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn

pip 缓存管理

  • 查看缓存信息 pip cache info
  • 查看缓存列表 pip cache list
  • 查看缓存目录 pip cache dir
  • 清除缓存 pip cache purgeconda clean --all
  • 直接删除缓存文件夹:
    • Windows: C:\Users\你的用户名\AppData\Local\pip\cache
    • Linux: ~/.cache/pip

模块导入与使用

基本导入

import module_name               # 导入整个模块
import module_name as alias      # 使用别名
from module_name import func     # 导入模块中某个函数
from module_name import *        # 导入所有内容(不推荐)

示例 - 内建模块 math

import math

print(math.sqrt(16))  # 平方根
print(abs(-5))        # 绝对值
print(math.pi)        # 圆周率

包(Package)

概念:包是一个包含多个模块的文件夹,必须存在 __init__.py 文件(即使为空),用于标识该文件夹是一个包。

目录结构示例

project/
│─ test.py
└─ package_runoob/
   │─ __init__.py
   │─ runoob1.py
   └─ runoob2.py

模块调用示例

# test.py
from package_runoob.runoob1 import runoob1
from package_runoob.runoob2 import runoob2

runoob1()
runoob2()

注意:

  • __init__.py 可用于包初始化或定义 __all__ 控制 from package import * 导入内容。
  • 相对导入:
    • . 当前目录
    • .. 上一级目录

模块搜索路径(sys.path)

Python 导入顺序:

  1. 当前目录
  2. sys.path 指定的路径
  3. 内置模块位置(通常 /usr/local/lib/pythonX.X/

查看搜索路径:

import sys
print(sys.path)

模块加载与编译缓存

  • .py.pyc(编译后的字节码)
  • .pyc 会生成于 __pycache__ 目录,下次导入直接加载(提高性能)。

模块特殊属性

属性 说明
__doc__ 文档字符串
__file__ 模块文件路径
__name__ 模块名(若为主模块,则为 "__main__"
__all__ from module import * 时可导出的内容列表

例如

# bk.py
__all__ = ['hello1']

def hello1(): ...
def hello2(): ...

from bk import * 只会导入 hello1


动态加载与工具函数

  • 重新加载模块
import importlib
importlib.reload(module_name)
  • help() 查看文档
  • dir() 列出模块成员
  • globals() / locals() 获取全局/局部命名空间字典

创建并发布 pip 包

注册账号

如果你还没有PyPI账号,请访问 PyPI官网 注册一个账号。

目前PyPi强制要求双因素认证(2FA),这一变化虽然提高了安全性,但也给日常工作带来了麻烦。
第一步:配置恢复代码

请妥善保存这些代码,它们是你在遇到问题时重置 2FA 的关键!
image

第二步:添加 2FA
image

安装 Python 包 pyotp 来生成 2FA 验证码。复制应用代码,并编写 Python 脚本获取验证码。

import pyotp
key = '粘贴 2FA 代码'

totp = pyotp.TOTP(key)

print(totp.now())

步骤

  1. 准备项目文件(源码 + setup.py + README.md + LICENSE)
  2. setup.py 示例:
from setuptools import setup, find_packages

setup(
    name="your_package_name",
    version="0.1.0",
    description="A short description",
    long_description=open('README.md', encoding='utf-8').read(),
    long_description_content_type='text/markdown',
    author="Your Name",
    packages=find_packages(),
    python_requires='>=3.6'
)
  1. 安装工具:
pip install setuptools wheel twine build
  1. 构建:
python -m build

这会在 dist 目录下生成 .tar.gz.whl 文件。

  1. 上传到 PyPI:
twine upload dist/*

此时会提示你输入PyPI的用户名和密码或者API。上传成功后,你的包就会在PyPI上可用了。

  1. 测试上传到 TestPyPI

在正式上传到PyPI之前,可以先上传到 TestPyPI 进行测试:

twine upload --repository-url https://test.pypi.org/legacy/ dist/*

你需要在 TestPyPI 上注册一个账号,注册地址:TestPyPI

需要输入API Token,我们把API Token复制到剪切板,然后点击输入密码的地方右键就行,不用Ctrl+C

  1. 安装或升级你的包

上传成功后,可以用 pip 安装并测试你的包:

pip install [--upgrade] -i https://test.pypi.org/simple/ your_package_name

通过这些步骤,你应该能够成功地将自己的Python包上传到PyPI。

posted @ 2018-07-15 15:06  凌逆战  阅读(593)  评论(0)    收藏  举报