这是使用GitHub Actions CI/CD设置的示例PYPI(Python软件包索引)软件包。它主要是针对即将编写和发布其第一个PYPI软件包的GitHub + VS代码(Windows / Mac / Linux)用户制造的。该软件包可以用作入门 /样板 /演示,教程可以为您提供快速简洁的解释,以解决您可能遇到的一些小但烦人的问题,例如软件包 /模块名称混乱,VS代码测试配置问题。
此示例软件包的灵感来自 /基于官方示例项目pypa / sameproject,但此软件包:
master分支或main分支时对测试进行测试,并在创建版本时发表PYTHONPATH中,因此测试文件没有堆积错误,并且可以在VS代码中使用Pytest运行(单击上面的按钮将此示例软件包用作您的新GitHub存储库的模板,这将初始化一个新的存储库,而我的提交不会在您的git历史记录中)
(如果您不使用GitHub,则可以下载示例软件包的档案
许多人使用相同的软件包和模块名称,您绝对可以这样做。但是此示例软件包及其模块的名称不同: example_pypi_package和examplepy 。
打开带有Visual Studio代码, Ctrl + Shift + F (Windows / Linux)或CMD + Shift + F (MacOS)的example_pypi_package文件夹,以查找名称的所有出现,并用软件包和模块的名称替换它们。还要记住更改文件夹SRC/examplepy的名称。
简而言之,非常粗略地说,包装名称用于pip install <PACKAGENAME> ,并且模块名称在import <MODULENAME>中使用。两个名称都应由小写基本字母(AZ)组成。如果您真的需要它们,它们可能会有强调( _ )。连字符( - )不应使用。
您还需要确保URL“ https://pypi.org/project/example-pypi-package/”(用包装名称替换example-pypi-package ,而所有_ sexempi - -package则不占用。
可以使用下划线( _ ),但这种使用是不建议的。如果名称不以一个数字开头,则可以使用数字,但是也不建议使用这种使用。
名称以数字和/或包含连字符的数字( - )开头:尽管从技术上讲是合法的,但这种名称会导致很多麻烦 - 用户必须使用importlib将其导入。
不要被pypi.org上的url“ pypi.org/project/project/example-pypi-package/”和名称“ example-pypi-package”。 pypi.org和pip系统将所有_转换为-并在网站 / in pip命令上使用后者,但是真实名称仍然与_相关,用户在导入软件包时应使用哪个。
如果您需要子包装,也可以使用名称空间。
在设置中进行必要的更改。
软件包的版本号__version__在src/examplepy/__ init__.py中。您可能想改变这一点。
该示例软件包的设计与Python 3.6、3.7、3.8、3.9兼容,并将针对这些版本进行测试。如果您需要更改版本范围,则应更改:
classifiers , setup.py中的python_requiresenvlistmatrix: python:在.github/workflows/test.yml如果您打算将用于测试目的的PYPI的操场上传到TestPypi,请在文件.github/workflows/reparte.yml中更改twine upload --repository pypi dist/*到twine upload --repository testpypi dist/* 。
PIP是Python软件包经理。如果使用Python 3.4和更高版本,则已经有PIP,默认情况下包括它。阅读此内容以了解如何检查PIP是否已安装。如果需要安装,请阅读此内容。
Visual Studio代码是当今最受欢迎的代码编辑器,我们的示例软件包已配置为使用VS代码。
安装VS代码扩展名“ Python”。
“ Python” VS代码扩展名建议您安装Pylint。另外,将示例软件包配置为使用vs code + python扩展的pytest,因此,安装pylint和pytest:
pip install pylint pytest(很可能会提示您安装它们,如果是这样,则无需输入和执行命令)
vscode.env的内容现在为PYTHONPATH=/;src/;${PYTHONPATH}对Windows有好处。如果使用Linux或MacOS,则需要将其更改为PYTHONPATH=/:src/:${PYTHONPATH} (替换;用: 。如果路径未正确设置,您会看到测试文件中的绒毛错误,而Pytest将无法正确运行测试/测试_*。py文件。
关闭并重新打开与代码。现在,您可以单击左菜单中的实验室瓶图标,并使用Pytest进行所有测试。 PYTEST似乎比标准Unittest Framework更好,它支持unittest因此您可以在测试文件中继续使用import unittest 。
示例软件包还具有.editorConfig文件。您可以安装使用该文件的VS代码扩展名为“ VS代码的EditorConfig”。使用当前配置,EditorConfig工具可以自动使用空格(4个空格,为.py,其他空间为2个)进行凹痕,设置UTF-8编码,线路的LF端,在非标记文件中的修剪式落后空间等。
在VS代码中,您可以转到文件 - >首选项 - >设置,在搜索框中键入“ Python格式化提供商”,然后选择三种Python代码格式化工具之一(AUTOPEP8,Black和Yapf),您将提示安装它。格式化代码文件的快捷方式是Shift + Alt + F (Windows); Shift + Option(Alt) + F (MACOS); Ctrl + Shift + I (Linux)。
在src/ examplepy/ ( examplepy应该由您的模块名称替换)文件夹中,重命名module1.py并在其中写入您的代码。如果需要,请添加更多模块.py文件。
在测试/文件夹中,重命名test_module1.py (用于测试_*。py ),并在其中编写单元测试代码(带有UnitSest)。如果需要,请添加更多测试_*。py文件。
安装托克斯并运行它:
pip install tox
tox在我们的配置中,Tox使用Check-Manifest(需要您的存储库进行git-initialized( git init )并添加( git add . ),setUptools的支票和使用pytest的单元测试。您不需要安装Check-Manifest和Pytest,TOX会将它们安装在单独的环境中。
自动化测试是针对多个Python版本进行的,但是在您的计算机上,如果是Python 3.9,则可能仅使用一个版本的Python,然后运行:
tox -e py39如果将更多文件添加到root目录( example_pypi_package/ ),则需要将文件添加到tox.ini中的check-manifest --ignore列表中。
安装或升级setuptools和wheel :
python -m pip install --user --upgrade setuptools wheel (如果python3是计算机上的命令,请将python更改为上述命令中的python3 ,或在Linux上使用BASH(在Linux上使用bash),将alias python=python3 python = 〜/.bash_aliases文件)
dist在example_pypi_package目录中,运行以下命令,以生成dist文件夹中的生产版本(SDIST):
python setup.py sdist bdist_wheel可选地,您可以在上传到PYPI或testPypi之前在本地安装软件包的DIST版本:
pip install dist/example_pypi_package-0.1.0.tar.gz(您可能需要首先卸载现有软件包:
pip uninstall example_pypi_package可能有几个带有相同名称的软件包,因此请多次运行pip uninstall直到它说没有更多包装可以删除为止。)
在PYPI上注册一个帐户,转到帐户设置§API令牌,“添加API令牌”。 PYPI令牌仅出现一次,将其复制到某个地方。如果您错过了它,请删除旧的,并添加一个新的令牌。
(如果您要上传到TestPypi,请注册一个TestPypi帐户)
在您新创建或现有的GitHub存储库的页面上,单击“设置” - >秘密- >新存储库秘密,名称应为PYPI_API_TOKEN ,值应该是您的pypi代币(以pypi- )开头。
该示例软件包具有自动测试和上传(发布)已设置为GitHub操作:
git push或拉动请求都会在master或main分支上提交时,都会针对带有GitHub操作的所需Python版本进行测试。在PYPI上发布软件包后,请访问https://pypi.org/project/example-pypi-package/(_ _ - 。在页面上复制命令,执行该命令以下载并从PYPI安装软件包。 (或test.pypi.org如果使用)
如果要在pypi.org上修改软件包的描述 /读数,则必须发布一个新版本。
安装或升级麻线:
python -m pip install --user --upgrade twine在您的$ home ( 〜 )目录中创建一个.pypirc文件,其内容应为:
[pypi]
username = __token__
password = <PyPI token> (如果您要上传到testPypi)(使用[testpypi]而不是[pypi] )
用您的真实PYPI <PyPI token>币(以pypi- )为单位。
(如果您不手动创建$ home/.pypirc ,则会提示您使用用户名(应该是__token__ )和密码(应该是您的pypi token)。
运行麻线以在Dist文件夹下上传所有档案:
python -m twine upload --repository pypi dist/ * (如果要上传到testpypi,请使用testpypi而不是pypi )
完成包装的较新版本后,请执行以下操作。
在src examplepy__init __. py中修改版本号__version__ 。
删除Dist中的所有旧版本。
再次运行以下命令以再生区域:
python setup.py sdist bdist_wheel再次运行以下命令以上传区域:
python -m twine upload --repository pypi dist/ * (如果需要,请使用testpypi而不是pypi )
顺便说一句,如果要将打字稿(JavaScript)软件包发布到NPM注册表中,请转到准备在2021年在NPM上发布的示例TypeScript软件包。