摘要

希望将Python项目进行打包处理,使用Python自带的打包工具setuptools将项目打包为pip形式的文件。

流程:安装打包工具 -> 创建辅助文件 -> 配置辅助文件 -> 运行打包工具

详细流程

1. 项目目录结构

首先,构建项目的基本目录结构:

your_project/
│
├── your_package/         # Python package
│   ├── __init__.py       # 包初始化文件
│   ├── module1.py        # 模块1
│   ├── module2.py        # 模块2
│
├── tests/                # 单元测试代码
│   ├── test_module1.py
│   ├── test_module2.py
│
├── setup.py              # 用于配置和构建包
├── README.md             # 包的说明文档
├── LICENSE               # 许可证文件
├── requirements.txt      # 包的依赖列表
├── MANIFEST.in           # 描述需要包含的额外文件

2. 创建setup.py

setup.py文件是setuptools工具的核心文件,它定义了包的元数据及安装依赖。

from setuptools import setup, find_packages

setup(
    name="your_package",  # 包名
    version="0.1.0",  # 包的版本号
    author="Your Name",
    author_email="mr_youngbw@outlook.com",
    description="A brief description of your package",
    long_description=open('README.md').read(),  # 读取README作为详细描述
    long_description_content_type="text/markdown",  # README文件格式
    url="https://042333.xyz/",  # 项目URL(如GitHub)
    packages=find_packages(),  # 自动查找项目中的包
    classifiers=[	
        # 全部参数可查看以下网站
        # https://pypi.org/pypi?%3Aaction=list_classifiers
        "Programming Language :: Python :: 3",
        "Operating System :: Microsoft :: Windows",
        "Environment :: GPU :: NVIDIA CUDA :: 11",
        "Development Status :: 3 - Alpha",
    ],
    python_requires='>=3.8',  # Python版本要求
    install_requires=[  # 依赖的包
        "numpy==1.19.5",
        'pandas',
        # 其他依赖包
    ],
    include_package_data=True,  # 包含数据文件
    package_data={
        # 包含的非代码文件后缀
        '': ['*.txt', '*.md'],
        # '': ['*.pyd', '*.txt',  '*.json', '*.csv','*.html','*.config','*.js'],
    },
    entry_points={  # 可选,如果你的包有命令行工具
        'console_scripts': [
            'your_command=your_package.module:function',
        ],
    },
)

3. 创建README.md (建议加上)

README.md文件将作为包的说明文档,可以写入包的功能介绍、安装方法、使用示例等。

4. 创建LICENSE (可忽略)

选择一个合适的开源许可证,比如MIT许可证。可以直接在GitHub上选择模板:

MIT License
...

5. 创建requirements.txt (建议加上)

列出包的依赖关系。如果没有复杂的依赖,可以与setup.py中的install_requires保持一致。

numpy==1.19.5
PyQt5
PyQtWebEngine
flask==3.0.3
matplotlib==3.6.0
requests==2.32.3

6. 创建MANIFEST.in (建议加上)

MANIFEST.in文件用于指定哪些文件应该包含在包的分发文件中。比如,你可能希望包括README.mdLICENSE文件。

include README.md
include LICENSE

7. 测试包

在打包之前,确保自己的包能被外部调用。

8. 构建和发布包

构建包

首先,确保已经安装了setuptoolswheel

pip install setuptools wheel

然后,在项目根目录运行以下命令构建包:

python setup.py sdist bdist_wheel

这个命令会在dist/目录中生成两个文件:一个.tar.gz文件(源代码包),一个.whl文件(wheel包)。

至此,离线包就做好了,可以将 .whl 文件放在python的scripts目录下,同样在控制台的scripts目录执行以下程序安装软件包:

pip install 软件包名.whl

发布到PyPI(闭源项目不要发布)

首先,安装twine

pip install twine

然后使用twine将包上传到PyPI

twine upload dist/*

上传时会要求输入PyPI的用户名和密码。如果没有账号,可以去PyPI注册

9. 安装和验证(发布的验证方法)

发布成功后,可以通过pip安装并验证包:

pip install your_package

验证安装是否成功:

import your_package

结束。

发表评论