博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用setuptools发布Python程序到PyPI,为Python添砖加瓦
阅读量:4978 次
发布时间:2019-06-12

本文共 2801 字,大约阅读时间需要 9 分钟。

pip install的东西从哪里来的?

从PyPI (Python Package Index)来的,官网是:  https://pypi.python.org/pypi/

执行pip install terminaltranslator命令的时候,它就会去从官方网站搜terminaltranslator,搜到了就下载压缩包并解压安装,如果没有搜索到就会报错。

众所周知的原因,国内访问国外网站总是不那么顺畅,于是就有了PyPI镜像,国内有很多,我用过阿里云的,中科大的,豆瓣的。阿里云的同步的好像不够及时,中科大的好像很及时,所以我就用中科大的。那么,该怎么用这些镜像呢?

方法1: 给pip加参数-i 后面跟镜像的url,但是要记住并每次都写这个url可是一件难事。

方法2: 编写配置文件~/.pip/pip.conf:

[global]index-url = https://mirrors.ustc.edu.cn/pypi/web/simple

 

如何把你自己的Python程序发布到PyPI上面去?

首先去官网注册你的账号,不能师出无名总得留下你的大名嘛。注册地址:

https://pypi.python.org/pypi?%3Aaction=register_form

注册好后编写你的配置文件~/.pypirc

[distutils]index-servers =   pypi  pypitest[pypi]repository=https://pypi.python.org/pypiusername=Your-Accountpassword=Your-Password[pypitest]repository=https://testpypi.python.org/pypiusername=Your-Accountpassword=Your-Password

 

这里配置了两个地址,一个是PyPI Live,是正式发布Python包的;另一个是PytPI Test 是用来正式发布之前验证你的包是否正常。

准备好你的Python包

通常你的代码目录结构如下:

root-dir/   # 你的代码的根目录  setup.py  setup.cfg  LICENSE.txt  README.md  mypackage/    __init__.py    foo.py    bar.py    baz.py

 

其中的setup.py就是安装包的文件,格式如下:

from distutils.core import setupsetup(  name = 'mypackage',  packages = ['mypackage'], # 跟上面代码目录下面的包名一致  version = '0.1',  description = 'A setup test package',  author = 'veelion',  author_email = 'veelion@gmail.com',  url = 'https://github.com/veelion/mypackage', # 指向 github 仓库的URL  keywords = ['testing', 'logging', 'example'], # 一些关键词  classifiers = [],)

 

setup可以从两个包里面调来使用,一个是上面用的distutils,另外一个是setuptools,如:

from setuptools import setup

 

这两个包功能基本一样,而setuptools支持wheel(未来包管理的趋势),所以一般用setuptools更好一些。再多说两句wheel,它是用来准备替换老的egg的,其中很好的一个优点是“二进制格式发布”,当包内含有C/C++写的扩展的时候可以把.so/.dll等二进制库打包进去,实现“一次编译,到处使用”的目标。省的用户编译时需要解决一堆依赖问题。

但是setuptools好像是不支持单文件包,即你的包只是一个.py文件而非上面说的是一个带__init__.py我目录。而distutils通过py_modules可以指定当个文件作为包。

上面说的是用setup.py管理Python包让其他人import用,而非在命令行下指向。

而terminaltranslator 是一个命令行工具,可以在setup.py里面不指定package而是指定scripts来把相关文件安装到bin目录下:

if __name__ == "__main__":    from setuptools import setup    setup(        name='TerminalTranslator',        version='0.8',        author="Veelion chong",        author_email="veelion@gmail.com",        license='MIT',        url='https://github.com/veelion/tt',        description=("Linux terminal translating tool implemented in Python"),        scripts=['t', 'tt', 'terminaltranslator.py'],    )

 

这里还用到一个小tip,把terminaltranslator.py 链接为t和tt两个别名,这样命令行下使用起来更方便。 不过,好像Windows下不支持Linux的软链接,t和tt可能在Windows下出问题

发布到PyPI

首先,打包生成压缩包

python setup.py sdistpython setup.py bdist_wheel (distutils不支持这个wheel选项)

 

上传到PyPI:

python setup.py register #注册你的包,如果出现与已有包重名则报错python setup.py upload

 

更新:在python3下面,python setup.py upload 已经无效,官方推荐用 twine 上传到pypi。

或者可以用twine (无需register,直接upload)

twine register dist/xxx.gztwine register dist/xxx.whltwine upload dist/*

 

 

python学习笔记整理于猿人学网站的

转载于:https://www.cnblogs.com/amiza/p/10470464.html

你可能感兴趣的文章