教师妹学python之十:共享代码

10.1 PyPi是什么?

PyPi 是 Python Package Index 的首字母简写,其实表示的是 Python 的 Packag 索引,这个也是 Python 的官方索引。

你需要的包(Package)基本上都可以从这里面找到。作为开源软件,你也希望能够贡献你的 Package 到这里供其他用户使用。我们举个栗子,如果你希望你的 Python 程序能够下载金融数据,目前比较好用的金融数据来源是 Yahoo 和 Google。你可能需要读取这 2 个平台的 API,然后做一个下载部分的代码,然后将这个代码整合到自己的项目中。是不是好麻烦,这样你可以到 PyPi 到上面去找找有没有人已经写过这个内容了,幸运的是,你真找到了,你找到了一个 package 叫做 yfinance。但是这个代码在远程,没有在本地呀,怎么用了?

你就需要将需要的内容从 PyPi 上下载下来引用即可。

安装模块的指令:

pip install yfinance

10.2 共享你的代码

10.2.1 函数转换为模块

编写代码,随便写了一个判断奇数的函数

#!/usr/bin/env python3
# _*_ coding: utf-8 _*_
# @Author : qa.yw
# @Time : 2021/3/30 11:19
# @File : isOdd.py
# @desc : 判断奇数函数
'''
此函数判断num是否属于奇数
'''

def isOddNum(num):
    if num % 2 == 0:
        return False
    else:
        return True

代码保存到isOdd.py文件中。

10.2.2 准备发布

为了共享isOdd.py这个模块,需要准备一个发布。在Python中,发布(distribution)是指一个文件集合,这些文件联合在一起允许你构建、打包、和发布你的代码。

  1. 为模块创建一个文件夹 isOdd,将isOdd.py复制到文件夹。
  2. 在isOdd文件夹中创建一个"setup.py"文件,这个文件包含有关发布的元数据。
from distutils.core import setup

setup(
    name='isOdd',
    version='1.0.0',
    py_modules=['isOdd'],
    author='qa.yw',
    author_email='byteflow@163.com',
    url='https://www.baidu.com',
    description='A function judging odd'
)

 python3 setup.py check, 检查setup.py文件是否规范。

10.2.3 构建发布

现在已经有一个文件,里面包含两个文件:模块代码在isOdd.py文件,模块的元数据在setup.py文件。

  1. 构建一个发布文件,在isOdd文件夹下打开一个终端,执行命令:python3 setup.py sdist
$ python3 setup.py sdist
running sdist
running check
warning: sdist: manifest template 'MANIFEST.in' does not exist (using default file list)

warning: sdist: standard file not found: should have one of README, README.txt, README.rst

writing manifest file 'MANIFEST'
creating isOdd-1.0.0
making hard links in isOdd-1.0.0...
hard linking isOdd.py -> isOdd-1.0.0
hard linking setup.py -> isOdd-1.0.0
creating dist
Creating tar archive
removing 'isOdd-1.0.0' (and everything under it)
  1. 将发布安装到你的Python本地副本中,执行命令:sudo python3 setup.py install
$ sudo python3 setup.py install

running install
running build
running build_py
creating build
creating build/lib
copying isOdd.py -> build/lib
running install_lib
copying build/lib/isOdd.py -> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages
byte-compiling /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/isOdd.py to isOdd.cpython-37.pyc
running install_egg_info
Writing /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/isOdd-1.0.0-py3.7.egg-info

发布介绍

利用Python发布工具,你的模块已经转换为一个发布,并且安装到你的Python本地副本上。

MANIFEST-这个文件包含发布中的文件列表

build文件-新增的文件夹

dist-发布包

  1. 通过上述操作,你的模块已经可以在本地引用了。

10.2.4 注册PyPi网站

当然上述你的模块仅仅只是在本地可以引用,但是其他人还不能引用你的模块,如果能让全世界的人都能用你的模块,你就要向PyPi上传你的发布。PyPI · The Python Package Index

10.2.5 向PyPi上传代码

方法1:

  1. 执行 python3 setup.py register
$ python3 setup.py register 
running register
running check
We need to know who you are, so please choose either:
 1. use your existing login,
 2. register as a new user,
 3. have the server generate a new password for you (and email it to you), or
 4. quit
Your selection [default 1]: 
1
Username: qa.yw
Password: 
Registering isOdd to https://upload.pypi.org/legacy/
Server response (500): <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076)>
  1. 执行 python3 setup.py sdist upload

方法2:

使用twine上传你的项目

pip3 install twine
  1. python3 setup.py sdist
python3 setup.py sdist
  1. twine upload dist/*
$ twine upload dist/*
Uploading distributions to https://upload.pypi.org/legacy/
Enter your username: qa.yw
Enter your password: 
Uploading isOddNum-1.0.0.tar.gz
100%|███████████████████████████████████████████████████████████████████████████████████████| 3.49k/3.49k [00:02<00:00, 1.70kB/s]

View at:
https://pypi.org/project/isOddNum/1.0.0/

  1. 安装
$ pip3 install isOddNum
Requirement already satisfied: isOddNum in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (1.0.0)¥

10.2.6 增加README.md

import setuptools

with open("README.md", "r", encoding="utf-8") as fh:
    long_description = fh.read()
setuptools.setup(
      name='lib-name',
      version='1.0',
      author='',
      author_email='',
      description='',
      long_description=long_description,
      long_description_content_type="text/markdown",
      url='',     
      packages=setuptools.find_packages(),
      data_files=[('diractory',['file'])],   
      install_requires=[
        'tensorflow>=2.2.0',
        'keras>=2.4.0',
        'numpy',
    ]   
    )

posted @ 2022-07-24 18:23  QualityAssurance21  阅读(77)  评论(0编辑  收藏  举报