每个软件开发员和数据科学家都难免要做程序包。本文推荐一篇Python开源程序包的制作指南,希望这个包含了具体操作步骤的指南能让你在构建程序包时不用花那么多耐心和时间。(适用于macOS系统的Python3.7版本)
![cfd18b89d684759e1e4b93e54368750a.png](https://img-blog.csdnimg.cn/img_convert/cfd18b89d684759e1e4b93e54368750a.png)
尝试着自己去构建美丽的东西吧!
![93708c8477bf971be5a548f48ee33f6d.png](https://img-blog.csdnimg.cn/img_convert/93708c8477bf971be5a548f48ee33f6d.png)
第1步:制定计划
我们的最终目的是制作一个很简单的Python库,它能够让用户轻松地将Jupyter笔记本转换为HTML文件或Python脚本。
程序包的第一个迭代可以让用户调用print语句的函数。
既然我们已经知道想做什么了,接下来要给包命名。
![93708c8477bf971be5a548f48ee33f6d.png](https://img-blog.csdnimg.cn/img_convert/93708c8477bf971be5a548f48ee33f6d.png)
第2步:命名
命名并不简单。名字要取得独特,简短且好记,要全部都是小写字母,绝对不能有破折号或其他标点符号,下划线也不行。给包命名的时候,还需要在GitHub,Google 和PyPI上确认这个名字是否可用。
如果你对包期望很高,希望在某一天它在GitHub上会有10000颗星星,那你还得确认这个名字是否能用于社交网络。在本文的示例中,我们把包命名为notebookc, 因为它能用于各种平台,简短而且有描述意义。
![93708c8477bf971be5a548f48ee33f6d.png](https://img-blog.csdnimg.cn/img_convert/93708c8477bf971be5a548f48ee33f6d.png)
第3步:检查配置
确保你安装配置了Python3.7,GitHub和 Homebrew。需要的话,可以在下面下载:
Python
下载安装Python3.7:https://www.python.org/downloads/
GitHub
免费注册GitHub账户:https://github.com/join
安装Git:https://help.github.com/articles/set-up-git/
Homebrew
Homebrew是Mac系统特有的程序包管理器。(安装说明:https://brew.sh/)。
![5736dd2fefcdcb13ab3ecf6d27d967e3.png](https://img-blog.csdnimg.cn/img_convert/5736dd2fefcdcb13ab3ecf6d27d967e3.png)
Venv
如果使用的是Python3.6版本,建议用venv来创建虚拟环境以构建程序包。用Python来管理虚拟环境的方法很多,可遵循的建议也有很多。
从Python3.3版本起,Python就自带venv了,但要注意,从Python3.4的版本开始,venv才能在虚拟环境中安装pip和setuptools。
用下列命令在Python3.7中创建虚拟环境:
python3.7-m venv my_env
用你喜欢的名字替换 my_env,激活虚拟环境:
sourcemy_env/bin/activate
现在可以在终端提示的最左端看到 (my_env) ,或者看到你给虚拟环境取的名字。
完成之后,使用deactivate停用虚拟环境。
之后,在GitHub上进行设置。
![93708c8477bf971be5a548f48ee33f6d.png](https://img-blog.csdnimg.cn/img_convert/93708c8477bf971be5a548f48ee33f6d.png)
第4步:在GitHub上创建组织
GitHub在版本控制注册上是市场领导者,其他的包括GitLab 和Bitbucket也很受欢迎。本指南中我们是用GitHub。
按照提示,在GitHub上创建一个新组织。我们将组织命名为notebooktoall。你可以在个人帐户下创建知识库(repository),但我们的目标之一是学习如何为更大的群体创建一个开源项目。
![45a1288329cb60b08255f32aa8e49725.png](https://img-blog.csdnimg.cn/img_convert/45a1288329cb60b08255f32aa8e49725.png)
![93708c8477bf971be5a548f48ee33f6d.png](https://img-blog.csdnimg.cn/img_convert/93708c8477bf971be5a548f48ee33f6d.png)
第5步:创建GitHub知识库
创建一个新的知识库。
![c0b8bd4d2c6c48c9fca50af3d583c8b4.png](https://img-blog.csdnimg.cn/img_convert/c0b8bd4d2c6c48c9fca50af3d583c8b4.png)
从下拉列表中添加gitignore,为你的知识库选择Python。gitignore文件的内容与要从Git知识库中剔除的文件夹和文件类型相匹配。你可以之后再修改gitignore以剔除其他不必要或敏感的文件。
建议从下拉列表的添加许可证(Add alicense)中选择一个许可证,它决定了使用知识库内容的用户能做什么。一些许可证会比较宽松,如果没有选择许可证,系统会采用默认的版权法。
本文的项目选的是通用公共许可证v3.0(GeneralPublic Licens v3.0 ),因为它用的广泛,而且可以“保证终端用户运行、学习、共享和修改软件的自由”——来自维基百科。
![fe4307ff783e07ecf0d8d6496e48b0b6.png](https://img-blog.csdnimg.cn/img_convert/fe4307ff783e07ecf0d8d6496e48b0b6.png)
![93708c8477bf971be5a548f48ee33f6d.png](https://img-blog.csdnimg.cn/img_convert/93708c8477bf971be5a548f48ee33f6d.png)
第6步:复制和添加目录
选择要在本地复制知识库的位置,然后按下面的说明运行:
复制git https://github.com/notebooktoall/notebookc.git
替代组织和知识库。
使用桌面图形用户界面(GUI)或代码编辑器进入项目文件夹,或者用cd my-project的命令行进入项目文件夹,然后用 ls—A查看文件。初始文件夹和文件如下:
.git.gitignore LICENSEREADME.rst
为主项目文件创建一个子文件夹,建议子文件夹的命名与程序包的相同,并确认名称不包含空格。
在子文件夹中创建一个名为 __init__.py的文件,这个文件可以先空着。将文件导入到子文件夹时,这个文件是必需的。
创建另一个与子文件夹同名的文件,并在文件名后添加.py。我的文件名是notebook .py。你可以按自己心意给这个Python文件命名。
现在notebookc目录内容如下:
.git.gitignore LICENSEREADME.rstnotebookc/__init__.pynotebookc/notebookc.py
![93708c8477bf971be5a548f48ee33f6d.png](https://img-blog.csdnimg.cn/img_convert/93708c8477bf971be5a548f48ee33f6d.png)
第7步:创建和安装requirements_dev.txt
在项目目录顶端创建一个requirements_dev.txt文件。通常把这个文件命名为requirements.txt。这样命名强调了这些程序包全部是开发员安装的。
在requirements_dev.txt里,要安装特定版本的pip和wheel。
pip==19.0.3
wheel==0.33.1
注意,这里用两个等号以及版本号指明了应安装的程序包的确切版本。
![e59508cfe136d77e50f667fee539a2d9.png](https://img-blog.csdnimg.cn/img_convert/e59508cfe136d77e50f667fee539a2d9.png)
将特定版本的程序包安装到requirements_dev.txt中。
如果合作开发员要分裂项目知识库,用pip来安装特定requirements_dev.txt程序包,就要用和你一样版本的包。此外,在创建文件的时候,Read TheDocs可使用这个文件来安装程序包。
在已经激活的虚拟环境中,使用以下命令将程序包安装到requirements_dev.txt:
pipinstall -r requirements_dev.txt
![93708c8477bf971be5a548f48ee33f6d.png](https://img-blog.csdnimg.cn/img_convert/93708c8477bf971be5a548f48ee33f6d.png)
第8步:代码和提交
作为示例,我们先创建一个很简单的函数。你可以之后再建一个很牛的函数。
在主文件中键入以下内容:
(我们要键入的是 notebookc/notebookc/notebookc.py)
def convert(my_name): """ Print a lineabout converting a notebook. Args: my_name(str): person's name Returns: None """ print(f"I'll convert a notebook for you some day, {my_name}.")
这就是我们建的函数啦。
文档字符串(docstrings)以三个连续的双引号开始并结束。在以后的文章中,它们会被用于自动创建文档。
现在提交修改。
![93708c8477bf971be5a548f48ee33f6d.png](https://img-blog.csdnimg.cn/img_convert/93708c8477bf971be5a548f48ee33f6d.png)
第9步:创建setup.py
setup.py文件是程序包的构建脚本文件。Setuptools的setup函数可构建要上传到PyPI的程序包。Setuptools里有程序包的信息,版本号以及用户所需要的其他程序包的信息。
以下是本文的setup.py文件示例:
from setuptools import setup, find_packages with open("README.md