前言

因为自已平时会把一个常用到逻辑写成一个工具python脚本,像关于时间字符串处理,像关于路径和文件夹遍历什么的工具。

每一次新建一个项目的时候都要把这些工具程序复制到每个项目中,换一个电脑后还要从github生新下载后再复制到项目中,实在太麻烦。

最后想想,还是建一个自已的pip项目会比较好。

类似于 java 将代码上传到 mvn 中央仓库。python 也可以做类似的事情。

项目编写

在 github 中创建对应的项目。

先建一个目录,比如 pycc,这个里边放的是你的项目代码

在这个 pycc 目录里,新建一个 __init__.py,这个文件里可以什么都不用写,然后就是你要发布的 .py 文件

编写 setup.py

这里重点说明一下这个setup.py文件,因为整个pip项目的发布和上传都是基于这个setup.py文件完成的。

下面是在官方基础上修改的例子。

import setuptools

with open("README.md", "r", encoding='utf8') as fh:
    long_description = fh.read()

setuptools.setup(
    # 别人搜索会用到的项目名称
    # 这个名字必须是独一无二的,你可以 pip search + 名字确保唯一性。
    name="pyopencc",
    version="0.0.1",
    keywords = ["tool","opencc", "opencc-py", "opencc-python", "Chinese Convert", "中文繁简体转换"],
    author="houbb",
    author_email="houbinbin.echo@gmail.com",

    description="Open Chinese Convert is an opensource project for conversion between Traditional Chinese and Simplified Chinese for python.",
    long_description=long_description,
    long_description_content_type="text/markdown",
    url="https://github.com/houbb/pycc",

    # 这个参数是导入目录下的所有__init__.py包
    packages=setuptools.find_packages(),
    include_package_data = True,

    # 这是一个数组,里边包含的是咱的pip项目引用到的第三方库,如果你的项目有用到第三方库,要在这里添上第三方库的包名,如果用的第三方版本不是最新版本,还要有版本号。
    install_requires = [],

    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ]
)

开源协议

必须符合 https://upload.pypi.org/legacy/

打包自已的项目

环境准备

确定安装了最新版本的 setuptoolswheel

python3 -m pip install --user --upgrade setuptools wheel

日志如下:

192:pycc houbinbin$ python3 -m pip install --user --upgrade setuptools wheel
Cache entry deserialization failed, entry ignored
Collecting setuptools
  Downloading https://files.pythonhosted.org/packages/c8/b0/cc6b7ba28d5fb790cf0d5946df849233e32b8872b6baca10c9e002ff5b41/setuptools-41.0.0-py2.py3-none-any.whl (575kB)
    100% |████████████████████████████████| 583kB 6.4kB/s 
Collecting wheel
  Downloading https://files.pythonhosted.org/packages/96/ba/a4702cbb6a3a485239fbe9525443446203f00771af9ac000fa3ef2788201/wheel-0
.33.1-py2.py3-none-any.whl
Installing collected packages: setuptools, wheel
  The script wheel is installed in '/Users/houbinbin/Library/Python/3.7/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed setuptools-41.0.0 wheel-0.33.1

运行打包命令

在和 setup.py 相同的目录下,执行下面的命令

python3 setup.py sdist bdist_wheel

命令正常执行,会在 dist 下生成如下的文件:

openccpy-0.0.1-py3-none-any.whl 
openccpy-0.0.1.tar.gz
  • 文件说明

tar.gz文件是源存档,而.whl文件是构建的分发。

较新的pip版本优先安装构建的发行版,但如果需要,将回退到源代码存档。

您应该始终上传源存档并为项目兼容的平台提供构建的存档。

在这种情况下,我们的示例包在任何平台上都与Python兼容,因此只需要一个构建的发行版。

上传打包文件

注册账号

https://pypi.org/ 上注册一个账号,然后。注册好后在邮箱激活

一般注册流程都是这么操作了,这里就不多说了。

记住自己的账号密码。

安装 twine

python3 -m pip install --user --upgrade twine

上传到 pypi

执行命令

python3 -m twine upload dist/*

日志

Uploading distributions to https://upload.pypi.org/legacy/
Uploading openccpy-0.0.1-py3-none-any.whl
100%|██████████████████████████████████████████████████████████████████████████████████████| 8.99k/8.99k [00:04<00:00, 2.26kB/s]
Uploading openccpy-0.0.1.tar.gz
100%|██████████████████████████████████████████████████████████████████████████████████████| 4.94k/4.94k [00:01<00:00, 3.13kB/s]

如果你不想重复输入密码

在上传前,要建一个文件,$HOME/.pypirc,$HOME目录在linux或者mac系统下就是~/目录。在这里建一个.pypirc文件。

里边的内容如下:

[distutils]
index-servers = pypi

[pypi]
username:你的PyPi用户名
password:你的PyPi密码

查看自己的项目

查找

$ pip search openccpy
openccpy (0.0.1)  - Open Chinese Convert is an opensource project for
                    conversion between Traditional Chinese and Simplified
                    Chinese for python.

使用

就和使用其他开源包一样。

参考资料

python如何发布自已pip项目

创建流程