发布 Python 软件包的确切招式

如果您像我一样,偶尔编写一个有用的python实用小程序,并希望与您的同事共享。做到这一点的最好方法是制作一个Python软件包:它易于安装,并且可以避免进行拷贝操作。

您可能会认为创建软件包很麻烦。其实现在已经不会这样了。我将通过此分步指南进行说明。只需执行三个主要步骤(以及一系列可选步骤),并辅以几个GitHub链接即可。

1.初始化

我们将创建podsearch – 一种在iTunes中搜索播客的实用程序。让我们创建一个目录和一个虚拟环境:


  1. $ mkdir podsearch 
  2. $ cd podsearch 
  3. $ python3 -m venv env 
  4. $ . env/bin/activate 

定义一个最小的包结构:


  1. ├── .gitignore 
  2. └── podsearch 
  3.     └── __init__.py 
  4. """Let's find some podcasts!""" 
  5.  
  6.  __version__ = "0.1.0" 
  7.  
  8.  
  9.  def search(namecount=5): 
  10.      """Search podcast by name.""" 
  11.      raise NotImplementedError() 

2.测试包

用Python创建一个包曾经是一个麻烦的任务。幸运的是,如今有一个很棒的 flit (https://flit.readthedocs.io/en/latest/)小程序可以简化所有操作。让我们安装它:


  1. pip install flit 

并创建软件包描述:


  1. $ flit init 
  2. Module name [podsearch]: 
  3. Author [Anton Zhiyanov]: 
  4. Author email [m@antonz.org]: 
  5. Home page [https://github.com/nalgeon/podsearch-py]: 
  6. Choose a license (see http://choosealicense.com/ for more info) 
  7. 1. MIT – simple and permissive 
  8. 2. Apache – explicitly grants patent rights 
  9. 3. GPL – ensures that code based on this is shared with the same terms 
  10. 4. Skip – choose a license later 
  11. Enter 1-4 [1]: 1 
  12.  
  13. Written pyproject.toml; edit that file to add optional extra info. 

pyproject.toml

Flit已创建pyproject.toml – 项目元数据文件。它已经具有将程序包发布到公共存储库-PyPI所需的一切。

注册TestPyPi(测试存储库)和PyPI(主要存储库)。它们是完全独立的,因此您将需要两个帐户。

在~/ .pypirc中设置对存储库的访问权限:


  1. [distutils] 
  2. index-servers = 
  3.   pypi 
  4.   pypitest 
  5.  
  6. [pypi] 
  7. username: nalgeon  # replace with your PyPI username 
  8.  
  9. [pypitest] 
  10. repository: https://test.pypi.org/legacy/ 
  11. username: nalgeon  # replace with your TestPyPI username 

并将软件包发布到测试存储库:


  1. $ flit publish –repository pypitest 
  2. Found 4 files tracked in git 
  3. … 
  4. Package is at https://test.pypi.org/project/podsearch/ 

完毕!该软件包可在TestPyPi上获得。

3.公开软件包

让我们改进代码,以便它能够实际搜索播客:


  1. # … 
  2.  
  3. SEARCH_URL = "https://itunes.apple.com/search" 
  4.  
  5. @dataclass 
  6. class Podcast: 
  7.     """Podcast metadata.""" 
  8.  
  9.     id: str 
  10.     name: str 
  11.     author: str 
  12.     url: str 
  13.     feed: Optional[str] = None 
  14.     category: Optional[str] = None 
  15.     image: Optional[str] = None 
  16.  
  17.  
  18. def search(name: str, limit: int = 5) -> List[Podcast]: 
  19.     """Search podcast by name.""" 
  20.     params = {"term"name"limit": limit, "media""podcast"
  21.     response = _get(url=SEARCH_URL, params=params) 
  22.     return _parse(response) 

并发布到主存储库-PyPI。仅在您的程序包中包含有用的代码后,才执行此步骤。不要发布无效的程序包和存根。


  1. flit publish 

发布完毕!是时候与同事分享了。为了使软件包易于使用,我建议您再执行以下几个步骤。

A.自述文件Readme和变更日志changelog

没人喜欢写文档。但是,如果没有文档,人们不太可能会想要安装您的软件包,因此我们需要添加README.md和CHANGELOG.md。

  • README.md
  • CHANGELOG.md
【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章