python菜鸟修炼:初入生态圈


当你立志成为python程序员时,你就加入了一个大家庭,这里不只有人,还有很多的代码,这个行话叫python的生态圈。圈里的人以此为业,也以此为乐,大家需要相互帮助。帮助什么?不是教你如何写代码,而是大家发誓不要写功能重复的代码,要写出没有Bug的代码,这就是开源共享的思想。你必须以该思想武装自己,这才是python程序员的世界观。(C语言程序员的世界观不是这样,你想一想,python没有编译,是一门完全源码的语言)。

有了上面的世界观,就决定了你做事的方法(世界观决定方法论吗)。那么你能做的有两个:1 遇到程序设计问题,首先查找生态圈,看有没有人已经提供了这样的代码,有则用之,拿来主义。如果只是部分满足要求,则拿来改之。你学过python中的函数的装饰、类的继承就是为了做这个。这里不再详述。 2 为生态圈做贡献,提供自己的代码,供大家使用。

有一个网站你必须常去,网址为pypi.org,看域名就知道有多牛(不过org一般都是免费的组织,你没猜错),这就是这个生态圈的核心。你可以把它看成是一个python程序员进行代码共享的代码仓库。赶快去申请一个会员。不要担心,网站向所有的人开放,不问来历,不问你是否菜鸟,只要你愿意都可以成为会员。而会员的唯一功能就是你可以将自己的代码提供给所有的人来使用。也就是说给了你为大家做贡献的机会。

如何拿来:当你遇到开发需求时,进入网站pypi.org(不需要你是会员),按照你的需求,进行搜索。找到你需要的代码名字(称为package,中文叫包),在你的计算机上执行如下命令,完成代码的下载和安装:

pip install [包的名字]

​ 现在你就可以在自己的代码中使用这个包了,如下面的代码。

from [包的名字] import [模块的名字]

如何奉献:下面我们建立一个包,并将其上传到pypi.org去占坑,作为你对生态圈的第一个贡献。

1 建立自己的第一个包

第一个项目非常简单,但麻雀虽小,五脏俱全。首先为项目建立下面的目录结构和文件:

|--myproject      					#项目的根目录
    |--docs       					#项目的文档目录
    |--tests								#项目的测试目录
    |--helloworld           #包目录*  
       |--__init__.py       #包的标志文件,可以为空
       |--helloworld.py     # 这个包只有一个模块
    |--README.md            # 项目的说明文件*。上传后会作为包的说明
    |--setup.py             # 项目发布文件*

其中,helloworld.py的内容为:

print('hello world! I am cainiao')

这只是一个简单的框架,但包含了所有的目录结构。

附加:

  • module。最基本的单位,每一个单独的python文件,扩展名一般为py,就是一个模块。
  • package。 是一个目录,目录下至少包含一个模块文件和一个__init__.py文件,后者可以是空的,你剋认为它只是一个标志,表示该目录为package。
  • project。本身是一个目录,下面包含了一到多个package以及项目的所有材料。

2 打包与发布

python项目的打包和发布都和setup.py文件有关,按照以下过程进行:

2.1 编写setup.py文件

# setup.py

from setuptools import setup, find_packages
setup(
    name = "cainiao.helloworld",
    version = "0.0.1",
    packages = find_packages(),
    author = "cainiao",
    author_email = "cainiao@example.com",
    description = "This is my hello world package",
    license = "MIT",
    url = "http://example.com/HelloWorld/"  
)

注意:

  • name:是准备上传的包的名字,就是别人下载你的包时,命令“pip install [包的名字]”中包的名字。因此:需要做到全网唯一性,一般建议这样写:你或公司名.包的名字。另外,这个名字和你发布的包的内部名字,没有必然联系,当然最好有联系,便于理解。
  • version:包的版本号。每次上传时,如果版本号没有变大,会被拒绝.
  • odescription:这句话会显示在你的包简介页面上,要求简洁。
  • 其它内容以后慢慢学。

2.2 打包

python项目为了保持跨平台的特性,一般采用源码打包与发布。在项目根目录下执行:

python setup.py sdist 

该命令就是对源码打包,会建立一个dist目录,并将项目打包为一个压缩文件,放在该目录下。

注意:

有些项目包含其它语言,尤其是c语言扩展。这些代码需要根据不同的平台进行编译后才能使用。这时如果采用源码打包,会将编译任务交给使用者。所以在打包前,可以预编译这些代码,并采用如下的命令打包。

python setup.py bdist_wheel --universal

其中的–universal代表支持python2和python3。该命令会建立build目录,并将所有文件打包到该目录下。这种包和平台相关。

注意:这两种打包方式,都是源码的压缩包。

2.3 发布

发布就是把你的包上传到pypi.org,供大家下载使用,但要注意,pypi先后有多个仓库,且支持的功能也不一样。我感受最深的就是对描述文件格式的支持,比如只有最新的仓库才支持markdown格式的long-description。因此为了避免掉坑,建议:

  1. 直接用twine进行发布。twine是pypi正在主推的工具,主要特点是增加了安全性和交互性,而且会将项目上传到最新的仓库,避免了很多坑。
  2. 另外,也不要建立配置文件,虽然需要每次上传都输入用户名和密码,但现在可以避免很多坑。

首先安装twine:

pip install twine

然后就可以上传了:

twine upload dist/*

在上传中,会要求你输入pypi.org网站的用户名和密码。

注意:每次发布,要保证新包的版本号要比仓库上的版本号大,否则会发布失败

至此,发布已经成功了。

说明:一个好的习惯是,先将项目传到测试仓库,测试正常后再上传到正式仓库。为此,可以采用如下命令:

twine upload dist/* -r testpypi

可以看出,只是命令后面加了一个参数,指明是测试仓库,其余都相同。

发布后,当然得赶快看看是否成功了:

打开pypi.org网站,在上面搜索包的名字,注意你的包的名字是cainiao.helloworld。应该就会看到,有时可能要等几分钟。

3 下载和维护

3.1 测试

站在其它开发者的角度,假装这个包不是自己的,下载下来试一下:

命令行执行:

pip install cainiao.helloworld

一般下载和安装的速度很快。

完成后,使用一下这个包。打开任何python编程环境,创建一个python文件,内容只有一句,如下:

from helloworld import helloworld

然后运行这个文件,就会看到屏幕输出:

hello world! I am cainiao.

成功了。

3.2 维护

在pypi.org网站上,登陆进入后,在个人主页有项目管理选项。进入后可以看到你上传的所有项目。你现在可能只有一个项目,但以后会越来越多。每一个项目会有一个简洁的页面,进去后可以对其查看和管理。尤其是管理中包括删除该项目。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值