有了上面的世界观,就决定了你做事的方法(世界观决定方法论吗)。那么你能做的有两个:1 遇到程序设计问题,首先查找生态圈,看有没有人已经提供了这样的代码,有则用之,拿来主义。如果只是部分满足要求,则拿来改之。你学过python中的函数的装饰、类的继承就是为了做这个。这里不再详述。 2 为生态圈做贡献,提供自己的代码,供大家使用。
有一个网站你必须常去,网址为pypi.org,看域名就知道有多牛(不过org一般都是免费的组织,你没猜错),这就是这个生态圈的核心。你可以把它看成是一个python程序员进行代码共享的代码仓库。赶快去申请一个会员。不要担心,网站向所有的人开放,不问来历,不问你是否菜鸟,只要你愿意都可以成为会员。而会员的唯一功能就是你可以将自己的代码提供给所有的人来使用。也就是说给了你为大家做贡献的机会。
如何拿来:当你遇到开发需求时,进入网站pypi.org(不需要你是会员),按照你的需求,进行搜索。找到你需要的代码名字(称为package,中文叫包),在你的计算机上执行如下命令,完成代码的下载和安装:
pip install [包的名字]
现在你就可以在自己的代码中使用这个包了,如下面的代码。
from [包的名字] import [模块的名字]
如何奉献:下面我们建立一个包,并将其上传到pypi.org去占坑,作为你对生态圈的第一个贡献。
第一个项目非常简单,但麻雀虽小,五脏俱全。首先为项目建立下面的目录结构和文件:
|--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以及项目的所有材料。
python项目的打包和发布都和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/" )
注意:
python项目为了保持跨平台的特性,一般采用源码打包与发布。在项目根目录下执行:
python setup.py sdist
该命令就是对源码打包,会建立一个dist目录,并将项目打包为一个压缩文件,放在该目录下。
注意:
有些项目包含其它语言,尤其是c语言扩展。这些代码需要根据不同的平台进行编译后才能使用。这时如果采用源码打包,会将编译任务交给使用者。所以在打包前,可以预编译这些代码,并采用如下的命令打包。
python setup.py bdist_wheel --universal其中的–universal代表支持python2和python3。该命令会建立build目录,并将所有文件打包到该目录下。这种包和平台相关。
注意:这两种打包方式,都是源码的压缩包。
发布就是把你的包上传到pypi.org,供大家下载使用,但要注意,pypi先后有多个仓库,且支持的功能也不一样。我感受最深的就是对描述文件格式的支持,比如只有最新的仓库才支持markdown格式的long-description。因此为了避免掉坑,建议:
首先安装twine:
pip install twine
然后就可以上传了:
twine upload dist/*
在上传中,会要求你输入pypi.org网站的用户名和密码。
注意:每次发布,要保证新包的版本号要比仓库上的版本号大,否则会发布失败。
至此,发布已经成功了。
说明:一个好的习惯是,先将项目传到测试仓库,测试正常后再上传到正式仓库。为此,可以采用如下命令:
twine upload dist/* -r testpypi可以看出,只是命令后面加了一个参数,指明是测试仓库,其余都相同。
发布后,当然得赶快看看是否成功了:
打开pypi.org网站,在上面搜索包的名字,注意你的包的名字是cainiao.helloworld。应该就会看到,有时可能要等几分钟。
站在其它开发者的角度,假装这个包不是自己的,下载下来试一下:
命令行执行:
pip install cainiao.helloworld
一般下载和安装的速度很快。
完成后,使用一下这个包。打开任何python编程环境,创建一个python文件,内容只有一句,如下:
from helloworld import helloworld
然后运行这个文件,就会看到屏幕输出:
hello world! I am cainiao.
成功了。
在pypi.org网站上,登陆进入后,在个人主页有项目管理选项。进入后可以看到你上传的所有项目。你现在可能只有一个项目,但以后会越来越多。每一个项目会有一个简洁的页面,进去后可以对其查看和管理。尤其是管理中包括删除该项目。