pyhton开发与发布依赖包到pypi
有勇气的牛排
821
Python
2023-03-16 00:03:18
前言
在 Python 项目开发完成后,如果希望让其他人能够方便地通过 pip install your-package
的方式安装和使用,就需要将项目打包并发布到 PyPI(Python Package Index)。本文将介绍从环境准备到上传发布的完整流程。
1. 前期准备
1.1 注册 PyPI 账号
1.2 配置认证信息
在用户根目录下创建配置文件 $HOME/.pypirc
(Windows 下为 C:\Users\<用户名>\.pypirc
):
[distutils]
index-servers=
pypi
testpypi
[pypi]
repository: https://upload.pypi.org/legacy/
username: 你的用户名
password: 你的密码
[testpypi]
repository: https://test.pypi.org/legacy/
username: 你的用户名
password: 你的密码
⚠️ 建议使用 PyPI Token 代替密码,更安全。可在 PyPI 后台生成 pypi-xxxxxxxx
格式的 Token。
2. 本地开发与测试
在项目根目录下通常包含 setup.py
或 pyproject.toml
(推荐新项目使用 pyproject.toml
)。
2.1 本地安装测试
python setup.py develop
这样可以在本地以“开发模式”安装,修改代码后立即生效,方便调试。
3. 构建发布文件
3.1 生成源代码压缩包(tar.gz)
python setup.py sdist
生成的文件会保存在 dist/
目录下。
3.2 生成二进制包(.whl)
pip install wheel
python setup.py bdist_wheel
Wheel 格式安装速度更快,推荐一并生成。
4. 上传前检查
4.1 基础检查
python setup.py check
4.2 使用 twine 检查包
pip install twine
twine check dist/*
5. 上传到 PyPI
5.1 上传到测试环境
twine upload --repository testpypi dist/*
安装测试包:
pip install -i https://test.pypi.org/simple/ your-package
5.2 上传到正式环境
确认无误后执行:
twine upload dist/*
上传完成后,其他用户即可通过:
pip install your-package
来安装。
6. 常见问题
- 上传失败:401 Unauthorized
- 检查
.pypirc
配置是否正确
- 建议使用 Token 替代密码
- 包名已存在
- PyPI 上的包名是唯一的,需要更换包名或添加后缀。
- 版本号冲突
- PyPI 不允许覆盖已发布的版本。修改
setup.py
或 pyproject.toml
中的 version
后重新上传。
7. 最佳实践建议
- 使用
pyproject.toml
代替 setup.py
,符合 [PEP 517/518] 标准。
- 优先生成 wheel 包,提高安装速度。
- 在上传前,先发布到 TestPyPI 进行验证。
- 使用 GitHub Actions / GitLab CI 等 CI 工具,自动化构建和上传。
<h2><a id="_0"></a>前言</h2>
<p>在 Python 项目开发完成后,如果希望让其他人能够方便地通过 <code>pip install your-package</code> 的方式安装和使用,就需要将项目打包并发布到 <strong>PyPI(Python Package Index)</strong>。本文将介绍从环境准备到上传发布的完整流程。</p>
<h2><a id="1__4"></a>1. 前期准备</h2>
<h3><a id="11__PyPI__6"></a>1.1 注册 PyPI 账号</h3>
<ul>
<li>正式环境:<a href="https://pypi.org/manage/account/?utm_source=chatgpt.com" target="_blank">https://pypi.org/manage/account/</a></li>
<li>测试环境(推荐先测试):https://test.pypi.org/manage/account/</li>
</ul>
<h3><a id="12__11"></a>1.2 配置认证信息</h3>
<p>在用户根目录下创建配置文件 <code>$HOME/.pypirc</code>(Windows 下为 <code>C:\Users\<用户名>\.pypirc</code>):</p>
<pre><code class="lang-conf">[distutils]
index-servers=
pypi
testpypi
[pypi]
repository: https://upload.pypi.org/legacy/
username: 你的用户名
password: 你的密码
[testpypi]
repository: https://test.pypi.org/legacy/
username: 你的用户名
password: 你的密码
</code></pre>
<p>⚠️ 建议使用 <strong>PyPI Token</strong> 代替密码,更安全。可在 PyPI 后台生成 <code>pypi-xxxxxxxx</code> 格式的 Token。</p>
<h2><a id="2__34"></a>2. 本地开发与测试</h2>
<p>在项目根目录下通常包含 <code>setup.py</code> 或 <code>pyproject.toml</code>(推荐新项目使用 <code>pyproject.toml</code>)。</p>
<h3><a id="21__38"></a>2.1 本地安装测试</h3>
<pre><div class="hljs"><code class="lang-shell">python setup.py develop
</code></div></pre>
<p>这样可以在本地以“开发模式”安装,修改代码后立即生效,方便调试。</p>
<h2><a id="3__46"></a>3. 构建发布文件</h2>
<h3><a id="31_targz_48"></a>3.1 生成源代码压缩包(tar.gz)</h3>
<pre><div class="hljs"><code class="lang-shell">python setup.py sdist
</code></div></pre>
<p>生成的文件会保存在 <code>dist/</code> 目录下。</p>
<h3><a id="32_whl_56"></a>3.2 生成二进制包(.whl)</h3>
<pre><div class="hljs"><code class="lang-shell">pip install wheel
python setup.py bdist_wheel
</code></div></pre>
<p>Wheel 格式安装速度更快,推荐一并生成。</p>
<hr />
<h2><a id="4__67"></a>4. 上传前检查</h2>
<h3><a id="41__69"></a>4.1 基础检查</h3>
<pre><div class="hljs"><code class="lang-shell">python setup.py check
</code></div></pre>
<h3><a id="42__twine__75"></a>4.2 使用 twine 检查包</h3>
<pre><div class="hljs"><code class="lang-shell">pip install twine
twine check dist/*
</code></div></pre>
<hr />
<h2><a id="5__PyPI_84"></a>5. 上传到 PyPI</h2>
<h3><a id="51__86"></a>5.1 上传到测试环境</h3>
<pre><div class="hljs"><code class="lang-shell">twine upload --repository testpypi dist/*
</code></div></pre>
<p>安装测试包:</p>
<pre><div class="hljs"><code class="lang-shell">pip install -i https://test.pypi.org/simple/ your-package
</code></div></pre>
<h3><a id="52__98"></a>5.2 上传到正式环境</h3>
<p>确认无误后执行:</p>
<pre><div class="hljs"><code class="lang-shell">twine upload dist/*
</code></div></pre>
<p>上传完成后,其他用户即可通过:</p>
<pre><div class="hljs"><code class="lang-shell">pip install your-package
</code></div></pre>
<p>来安装。</p>
<h2><a id="6__114"></a>6. 常见问题</h2>
<ol>
<li><strong>上传失败:401 Unauthorized</strong>
<ul>
<li>检查 <code>.pypirc</code> 配置是否正确</li>
<li>建议使用 Token 替代密码</li>
</ul>
</li>
<li><strong>包名已存在</strong>
<ul>
<li>PyPI 上的包名是唯一的,需要更换包名或添加后缀。</li>
</ul>
</li>
<li><strong>版本号冲突</strong>
<ul>
<li>PyPI 不允许覆盖已发布的版本。修改 <code>setup.py</code> 或 <code>pyproject.toml</code> 中的 <code>version</code> 后重新上传。</li>
</ul>
</li>
</ol>
<h2><a id="7__124"></a>7. 最佳实践建议</h2>
<ul>
<li>使用 <code>pyproject.toml</code> 代替 <code>setup.py</code>,符合 [PEP 517/518] 标准。</li>
<li>优先生成 <strong>wheel 包</strong>,提高安装速度。</li>
<li>在上传前,先发布到 <strong>TestPyPI</strong> 进行验证。</li>
<li>使用 <strong>GitHub Actions / GitLab CI</strong> 等 CI 工具,自动化构建和上传。</li>
</ul>
评论区