
在Python中打包自己的项目,最核心的思路是利用Python的包管理生态,尤其是
setuptools
.whl
.tar.gz
要打包一个Python项目,现代且推荐的做法是围绕
pyproject.toml
setup.py
pyproject.toml
首先,你需要一个合理的项目结构。我个人比较偏爱
src
src
my_project/ ├── src/ │ └── my_package/ │ ├── __init__.py │ └── main.py ├── pyproject.toml ├── README.md └── LICENSE
接下来,关键是创建
pyproject.toml
pyproject.toml
立即进入“豆包AI人工智官网入口”;
立即学习“豆包AI人工智能在线问答入口”;
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "my-awesome-package"
version = "0.1.0"
authors = [
{ name="Your Name", email="your.email@example.com" },
]
description = "一个关于我的Python项目的简短描述。"
readme = "README.md"
requires-python = ">=3.8"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
dependencies = [
"requests>=2.28.1",
"rich~=13.0",
]
[project.urls]
"Homepage" = "https://github.com/yourusername/my-awesome-package"
"Bug Tracker" = "https://github.com/yourusername/my-awesome-package/issues"
[tool.setuptools.packages.find]
where = ["src"] # 告诉setuptools去src目录找包这里面,
[build-system]
setuptools
[project]
dependencies
[tool.setuptools.packages.find]
src
setuptools
如果你有一些非Python文件需要包含在包里(比如配置文件、数据文件),
setuptools
src
MANIFEST.in
pyproject.toml
配置好这些后,打包就非常简单了。确保你安装了
build
pip install build
pyproject.toml
python -m build
这个命令会在你的项目根目录下创建一个
dist/
.whl
.tar.gz
.whl
.tar.gz
打包过程本身并不复杂,真正的挑战往往在于如何合理组织代码、管理依赖,以及处理一些边缘情况,比如包含非Python资源。但只要遵循
pyproject.toml
在Python的世界里,打包工具的选择其实还挺丰富的,但它们各有侧重,理解这些差异能帮助你根据项目需求做出最佳选择。
1. setuptools
pyproject.toml
setup.py
pyproject.toml
setup.py
setuptools
pyproject.toml
2. Poetry
Poetry
pyproject.toml
poetry.lock
Poetry
setuptools
3. Flit
Flit
pyproject.toml
pyproject.toml
Flit
src
Flit
4. Hatch
Hatch
pyproject.toml
Poetry
setuptools
setuptools
Poetry
Hatch
Poetry
setuptools
Hatch
选择哪个工具,很大程度上取决于你的项目类型、团队偏好以及你对工具集成度的要求。对我而言,如果是纯库,
setuptools
pyproject.toml
Poetry
依赖管理和版本控制是项目健康运行的关键。我见过太多项目因为依赖问题而陷入泥潭,所以这块的处理,我觉得怎么强调都不过分。
1. 依赖声明:pyproject.toml
dependencies
pyproject.toml
[project]
[project]
dependencies = [
"requests>=2.28.1,<3.0", # 明确版本范围
"numpy~=1.23.0", # 兼容版本,例如 1.23.x
"pandas", # 不指定版本,但通常不推荐在库中使用
]==1.2.3
>=1.2.3
~=1.2.3
~1.2.3
~=1.2.3
>=1.2.3
<1.3.0
>=1.2.3,<2.0.0
~=
>=X.Y.Z,<X+1.0.0
Poetry
pip-tools
2. 依赖锁定:poetry.lock
requirements.txt
Poetry
poetry.lock
Poetry
poetry.lock
pip-tools
requirements.txt
Poetry
pip-tools
requirements.in
pip-compile
requirements.txt
# requirements.in requests rich # 生成 requirements.txt pip-compile requirements.in
然后安装时使用
pip install -r requirements.txt
3. 虚拟环境(Virtual Environments): 这是Python依赖管理的基础。永远不要在全局Python环境中安装项目依赖。使用
venv
conda
Poetry
# 使用 venv python -m venv .venv source .venv/bin/activate # Linux/macOS .venv\Scripts\activate # Windows pip install -r requirements.txt
4. 版本控制(Semantic Versioning - SemVer): 为你的项目本身以及你所依赖的第三方库选择合理的版本控制策略,尤其是语义化版本(
MAJOR.MINOR.PATCH
MAJOR
MINOR
PATCH
5. 挑战与实践:
poetry.lock
requirements.txt
对我来说,依赖管理是一个持续的过程。它不是一次性的配置,而是随着项目演进需要不断审视和调整的。使用合适的工具和策略,可以大大减少这方面的摩擦。
将你的Python包发布出去,无论是公开的PyPI还是私有的仓库,都是为了让其他人(或你自己)能够方便地安装和使用它。这个过程通常涉及构建、认证和上传三个主要步骤。
1. 发布到PyPI(Python Package Index)
PyPI是Python官方的公共包索引,是大多数开源Python包的首选发布平台。
a. 准备工作:
twine
twine
pip install twine
b. 构建你的包: 确保你已经按照前面的“解决方案”部分,使用
python -m build
dist/
.whl
.tar.gz
c. 上传包: 使用
twine
dist/
twine upload dist/*
运行这个命令后,
twine
__token__
如果一切顺利,你的包就会被上传到PyPI,并且你可以在PyPI网站上看到它。之后,任何人都可以通过
pip install your-awesome-package
2. 发布到私有仓库
有时,你的包不适合公开,或者你希望在企业内部共享。这时,私有仓库就派上用场了。常见的私有仓库解决方案有:
a. 配置私有仓库: 这通常涉及到在你的私有仓库服务中创建一个新的Python仓库,并获取其URL和认证凭据(API Key, 用户名/密码等)。
b. 构建你的包: 与发布到PyPI一样,先用
python -m build
c. 上传包: 你仍然可以使用
twine
twine upload --repository-url https://your-private-repo.com/pypi/your-repo/ dist/*
twine
d. 从私有仓库安装: 一旦包上传成功,其他人就可以通过
pip
pip install --index-url https://your-private-repo.com/pypi/your-repo/ your-awesome-package
如果私有仓库需要认证,你可能还需要在URL中包含凭据,或者通过
~/.pip/pip.conf
pip.ini
# ~/.pip/pip.conf [global] index-url = https://username:password@your-private-repo.com/pypi/your-repo/
或者,为了安全,使用
--extra-index-url
pip install --extra-index-url https://username:password@your-private-repo.com/pypi/your-repo/ your-awesome-package
安全提示:
永远不要将API Token或密码硬编码到脚本或版本控制中。使用环境变量、CI/CD工具的秘密管理功能,或者
~/.pypirc
~/.pypirc
[distutils]
index-servers =
pypi
my-private-repo
[pypi]
username = __token__
password = pypi-api-token
[my-private-repo]
repository = https://your-private-repo.com/pypi/your-repo/
username = repo-username
password = repo-password然后你可以使用
twine upload --repository my-private-repo dist/*
发布包是项目生命周期中非常重要的一环,它将你的代码从本地环境推向更广阔的舞台。理解这些工具和流程,能让你更自信地管理和分发你的Python项目。
以上就是python中如何打包自己的Python项目?的详细内容,更多请关注php中文网其它相关文章!
python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号