← 返回首页
🐍

模块与包

📂 python ⏱ 2 min 230 words

什么是模块

模块是一个包含Python代码的文件,它可以定义函数、类和变量。使用模块可以将代码组织成可重用的单元。

# mymodule.py
def greet(name):
    return f"你好,{name}!"

PI = 3.14159

class Calculator:
    def add(self, a, b):
        return a + b

导入模块

Python提供了多种导入模块的方式。

# 导入整个模块
import math
print(math.sqrt(16))  # 输出: 4.0

# 导入特定函数
from math import sqrt, pi
print(sqrt(16))  # 输出: 4.0
print(pi)        # 输出: 3.141592653589793

# 导入并重命名
import numpy as np
arr = np.array([1, 2, 3])

# 导入模块所有内容(不推荐)
from math import *

__name__变量

__name__变量用于区分模块是被导入还是直接运行。

# calculator.py
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

# 只在直接运行时执行
if __name__ == "__main__":
    print("测试代码")
    print(add(1, 2))
    print(subtract(5, 3))

包的结构

包是包含__init__.py文件的目录,用于组织相关的模块。

mypackage/
    __init__.py
    module1.py
    module2.py
    subpackage/
        __init__.py
        module3.py
# mypackage/__init__.py
from .module1 import function1
from .module2 import Class2

# 使用包
from mypackage import function1, Class2
from mypackage.subpackage import module3

pip包管理

pip是Python的包管理工具,用于安装和管理第三方包。

# 安装包
pip install requests

# 安装特定版本
pip install requests==2.28.0

# 升级包
pip install --upgrade requests

# 卸载包
pip uninstall requests

# 查看已安装的包
pip list

# 查看包信息
pip show requests

# 从requirements.txt安装
pip install -r requirements.txt

创建自己的包

创建一个Python包需要遵循特定的目录结构和配置。

# setup.py
from setuptools import setup, find_packages

setup(
    name="my_package",
    version="0.1.0",
    packages=find_packages(),
    install_requires=[
        "requests>=2.28.0",
    ],
    author="Your Name",
    author_email="your.email@example.com",
    description="我的第一个Python包",
)

模块搜索路径

Python在导入模块时会按照特定顺序搜索模块位置。

import sys

# 查看模块搜索路径
print(sys.path)

# 添加自定义搜索路径
sys.path.append('/path/to/my/modules')

# 现在可以导入该路径下的模块
import my_module

相对导入与绝对导入

在包内部,可以使用相对导入或绝对导入。

# 相对导入
from . import module1
from .. import parent_module
from .subpackage import module3

# 绝对导入
from mypackage import module1
from mypackage.subpackage import module3

命名空间包

Python 3.3+支持命名空间包,允许包分布在多个目录中。

# namespace_package.py
# 不需要__init__.py文件
# 包可以分布在多个位置

# 在package1目录
# mypackage/module_a.py

# 在package2目录
# mypackage/module_b.py

# 两个目录可以合并为一个包
from mypackage import module_a, module_b

最佳实践

模块与包是Python代码组织的基础,掌握它们能让你构建更大型、更易维护的项目。