如果您像我一样,偶尔编写一个有用的python实用小程序,并希望与您的同事共享。做到这一点的最好方法是制作一个Python软件包:它易于安装,并且可以避免进行拷贝操作。
您可能会认为创建软件包很麻烦。其实现在已经不会这样了。我将通过此分步指南进行说明。只需执行三个主要步骤(以及一系列可选步骤),并辅以几个GitHub链接即可。
1.初始化
我们将创建podsearch – 一种在iTunes中搜索播客的实用程序。让我们创建一个目录和一个虚拟环境:
- $ mkdir podsearch
- $ cd podsearch
- $ python3 -m venv env
- $ . env/bin/activate
定义一个最小的包结构:
- .
- ├── .gitignore
- └── podsearch
- └── __init__.py
- """Let's find some podcasts!"""
- __version__ = "0.1.0"
- def search(name, count=5):
- """Search podcast by name."""
- raise NotImplementedError()
2.测试包
用Python创建一个包曾经是一个麻烦的任务。幸运的是,如今有一个很棒的 flit (https://flit.readthedocs.io/en/latest/)小程序可以简化所有操作。让我们安装它:
- pip install flit
并创建软件包描述:
- $ flit init
- Module name [podsearch]:
- Author [Anton Zhiyanov]:
- Author email [m@antonz.org]:
- Home page [https://github.com/nalgeon/podsearch-py]:
- Choose a license (see http://choosealicense.com/ for more info)
- 1. MIT – simple and permissive
- 2. Apache – explicitly grants patent rights
- 3. GPL – ensures that code based on this is shared with the same terms
- 4. Skip – choose a license later
- Enter 1-4 [1]: 1
- Written pyproject.toml; edit that file to add optional extra info.
pyproject.toml
Flit已创建pyproject.toml – 项目元数据文件。它已经具有将程序包发布到公共存储库-PyPI所需的一切。
注册TestPyPi(测试存储库)和PyPI(主要存储库)。它们是完全独立的,因此您将需要两个帐户。
在~/ .pypirc中设置对存储库的访问权限:
- [distutils]
- index-servers =
- pypi
- pypitest
- [pypi]
- username: nalgeon # replace with your PyPI username
- [pypitest]
- repository: https://test.pypi.org/legacy/
- username: nalgeon # replace with your TestPyPI username
并将软件包发布到测试存储库:
- $ flit publish –repository pypitest
- Found 4 files tracked in git
- …
- Package is at https://test.pypi.org/project/podsearch/
完毕!该软件包可在TestPyPi上获得。
3.公开软件包
让我们改进代码,以便它能够实际搜索播客:
- # …
- SEARCH_URL = "https://itunes.apple.com/search"
- @dataclass
- class Podcast:
- """Podcast metadata."""
- id: str
- name: str
- author: str
- url: str
- feed: Optional[str] = None
- category: Optional[str] = None
- image: Optional[str] = None
- def search(name: str, limit: int = 5) -> List[Podcast]:
- """Search podcast by name."""
- params = {"term": name, "limit": limit, "media": "podcast"}
- response = _get(url=SEARCH_URL, params=params)
- return _parse(response)
并发布到主存储库-PyPI。仅在您的程序包中包含有用的代码后,才执行此步骤。不要发布无效的程序包和存根。
- flit publish
发布完毕!是时候与同事分享了。为了使软件包易于使用,我建议您再执行以下几个步骤。
A.自述文件Readme和变更日志changelog
没人喜欢写文档。但是,如果没有文档,人们不太可能会想要安装您的软件包,因此我们需要添加README.md和CHANGELOG.md。
- README.md
- CHANGELOG.md
-