Django 1.10中文文档:How to write reusable app

亲自出手写二个python库(二),入手写python库

引言

通过上一节中所述,大家搭建好了二个Python情状用于库开垦,大家在那1节真正伊始搭建三个库,并将其公布。

项目文书档案结构

第三大家先营造出团结项指标文书档案结构,首先是LICENSE和README.md,那四个文本并不是不能缺少的,可是最棒将其丰盛,方便人家通晓您的品类。README.md是关于本项指标介绍,LICENSE是意味着该项目所遵守的开源协议,一般MIT用的相比较多,其余协商你能够百度谷歌询问一下。

接下去是打包库必要的局地文书,首要有MANIFEST.in和setup.py三个文本。MANIFEST.in表示打包时不会被电动包罗进去的附Gavin件清单。setup.py是包裹程序配置文件,须求安装有个别选项。此外,setup.cfg是富含setup.py额外布置音信的文件,作者未有用到这里面包车型大巴安装,所以本项目中其是空的。

caafinder文件夹就是我们要写的Python程序,大家要专注那个文件夹里必须有__init__.py那些文件。

下边是壹念之差setup.py的局部轻巧易行安排选项,详细请参见官方文书档案。

可以参照一下:

  • PyPA sample project那是3个法定示例库结构。

  • Python Packaging User Guide那是Python打包的合法英文文书档案。

至于模块

模块也正是库,大家友好写程序时,经常通过import
XX来导入三个亟待的模块,在Python中,二个py文件便是2个模块,如一个abc.py的文件就是一个名字叫abc的模块。

你恐怕还想到,若是差异的人编写的模块名一样怎么做?为了幸免模块名冲突,Python又引进了按目录来集团模块的法子,称为包(Package),包是3个涵盖__init__.py的公文夹,如图中文档所示,大家有3个包caafinder,因为它的子级有三个__init__.py,包caafinder具备database和workspace三个模块。__init__.py能够是空文件,也足以有Python代码,因为__init__.py自个儿就是三个模块,而它的模块名就是caafinder。

程序打包

通过进行下列语句来进展打包:

里头xxx能够是下列三种格局中当中3个:

譬喻:

此时在根目录出现了dist文件夹,里面有name-version.tar.gz那个文件,那正是大家要颁发到PyPI的滑坡包了。

发布到PyPI

率先大家要求在PyPI上登记二个帐号,并在本地用户根目录下创制文件~/.pypirc,这样之后就无需输入帐号密码了。

接下去,须求在PyPI网址上注册贰个品类,网址提供二种艺术注册,采取一种就能够,最轻便易行的是因而上传打包时生成的PKG-INFO文件,生成项目信息。此步骤只需在率先次发布时操作。

接下去就是最终一步,上传打包好的库。大家那边是用twine,倘诺条件中并未有安装,须求先使用pip
install twine安装就可以。

这会儿在网页上就能够见到自身的源代码包啦,并且能够经过应用pip install
packagename,就足以利用大家团结写的Python库了。

祝大家玩的欣然自得,希望大家能到Github上救助点个赞。

作者:Gutierrez

来源:


————广告时间————

马哥教育二零一八年Python自动化运行开垦实战面授班二零一八年一月五号初阶,马哥联合BAT、豆瓣等细小网络Python开荒达人,依据当前集团急需的Python开采人才开始展览了深度定制,加入了汪洋轻微互连网公司:大众点评、饿了么、腾讯等生产情况真是品种,课程规行矩步,从Python基础到Python高端,让您融汇贯通Python基础理论,手把手教学让你具有Python自动化开辟须要的前端分界面开采、Web框架、大监督检查种类、CMDB系统、认证壁垒机、自动化流程平台6大实战技艺,让您从0起先蜕产生Hold住年薪20万的Python自动化开采人才

围观二维码领到学习材质**

愈来愈多Python好文请点击【阅读最初的小说】哦

↓↓↓

卷入公布Python模块的主意详解,python详解

前言

前日把温馨的VASP文件管理库开始展览了包装并上传播PyPI,未来能够直接通过pip和easy_install来设置VASPy啦(同时应接使用VASP做总计化学的童鞋们加星和涉企进去),

VASPy的GotHub地址:
VASPy的PyPI地址:

出于投机的回想力真是不咋地,怕时间久了就忘了,于是在此间一挥而就以团结的VASPy程序为例对python的卷入和上传实行下总括。

VASPy包文件结构

第3写贴上来VASPy包的凡事文件结构, 前边的开始和结果都以以此为例举行认证:

VASPy/
├── LICENSE
├── MANIFEST
├── MANIFEST.in
├── README.rst
├── requirements.txt
├── scripts
│  ├── change_incar_parameters.py
│  ├── create_inputs.py
│  └── ...
├── setup.cfg
├── setup.py
├── tests
│  ├── incar_test.py
│  ├── __init__.py
│  ├── oszicar_test.py
│  ├── outcar_test.py
│  ├── testdata
│  │  ├── CONTCAR
│  │  ├── DOS_SUM
│  │  ├── ELFCAR
│  │  └── ...
│  └── ...
└── vaspy
  ├── __init__.py
  ├── iter.py
  ├── matstudio.py
  └── ...

4 directories, 54 files

打包和设置第二方包的工具

此地大家须要依据setuptools和pip等工具举办自身包的包装和宣布以及安装,要是须要营变成wheel还须求设置wheel模块。若是python版本>=2.7.玖依然>=叁.四,setuptools和pip是1度安装好的,大概须要展开立异到最新版本

pip install -U pip setuptools

可以利用包管理工科具,举个例子

yum install pip
sudo apt-get install pip

经过get-pip.py脚本安装,尽管检验到未有安装wheel和setuptools也会自动安装

python get-pip.py

切实的工具安装和介绍就不多讲了,能够请参见requirements for installing
packages

包中不相同文件的意义

setup.py

本条文件是包装整个项目最重要的文件,它在这之中提供了五个根本的功能:

setup()函数,此函数的参数钦定了何等安插自身的连串。
命令行工具,包涵打包,测试,发表等。能够通过下边包车型地铁一声令下查看;

python setup.py --help-commands

setup.cfg

此文件包含了创设时候的局地暗中同意参数举个例子营造bdist_wheel的时候的–universal参数

[bdist_wheel]
universal=1

如此每一回打包的时候就能默许使用–universal参数了,效果类似:

python setup.py bdist_wheel --universal

README.rst

其壹最初本身是用markdown写的,打包发布到PyPI之后开采PyPI不匡助markdown的渲染,页面上真是一片混乱,于是就用reStrutruedText的语法重新写了一次。毕竟标志语言语法基本上能够秒上手,实在非常找个模板比葫芦画瓢就行。
reStructureText的语法规则可参照官方文书档案:Quick reStructuredText

实则还有1种艺术正是运用pandoc将markdown调换到rst格式,1种方便人民群众的法子正是行使pyandoc模块在揭橥的时候自动调换。
具体方法能够参见:Use Markdown README’s in Python modules

MANIFEST.in

此文件在卷入的时候告诉setuptools还亟需额外打包这几个文件,比方笔者VASPy中的单元测试的测试数据文件小编就应用这一个文件将其含有进来。当然README,LICENSE这几个也足以透过它来一同打包进去。
下边是本身要好的MANIFEST.in的内容:

include README.rst
include requirements.txt
include LICENSE
recursive-include scripts *
recursive-include tests *

现实的语法规则能够参见:The MANIFEST.in template

vaspy/

此文件夹就是vaspy源代码所在的包。

tests/

此文件夹也是3个子包,蕴涵了单元测试脚本,为了能应用python setup.py
test举办单元测试,特地增添了__init__.pys使其变为1个包。

setup()的参数

此间只介绍作者使用的多少个参数,其余参数的现实性使用能够参照:

name

versions = "vaspy"

是总体项指标名字,打包后会使用此名字和版本号。

version

from vaspy import __version__
version = __version__

description

是多个总结的对项目标叙述,一般一句话就好,会显得在pypi上名字下端。

long_description

是三个长的叙说,约等于对项目的三个简洁,要是此字符串是rst格式的,PyPI会自动渲染成HTML展现。这里能够一贯读取README.rst中的内容。

url

包的连日,平时为GitHub上的链接只怕readthedocs的链接。

packages

要求包括的子包列表,setuptools提供了find_packages()协助大家在根路线下搜寻包,那一个函数distutil是不曾的。

setup_requires

其一参数定义了VASPy安装和称心如意运作所须要的其他注重项(最大旨的),使用pip安装的时候会对这几个信赖项进行安装。
有关这一个参数与requirements.txt的界别能够参照:install_requires vs
Requirements files

classifier

以此参数提供了1层层的归类,在PyPI上会将其放入不一致的目录中讲项目进行分类。
实际的categories的称号和规则参谋:

test_suite

其1参数可以协理我们采用

python setup.py test

来跑单元测试,再也无需独自再写2个剧本例如run_tests.py那样来跑单元测试了。
此参数的合法表达:

A string naming a unittest.TestCase
subclass (or a package or module containing one or more of them, or a
method of such a subclass), or naming a function that can be called with
no arguments and returns a unittest.TestSuite. If the named suite is a
module, and the module has an additional_tests() function, it is called
and the results are added to the tests to be run. If the named suite is
a package, any submodules and subpackages are recursively added to the
overall test suite.

也正是说这么些参数能够承受各个类型的参数:

接收unittest.TestCase子类,大家能够讲全数单元测试写入贰个测试用例中,然后import进来,再传你给test_suite
接过函数对象,此函数对象未有别的参数,且再次来到贰个unittest.TestSuite.那样大家就足以单独写3个函数,将八个测试用例合并成多个suite然后回来,然后再将函数import进来传给test_suite。

模块和包名称,小编正是应用这种方法,以前本人的测试都以分离的四个本子,那样小编增添四个__init__.py就能够将其成为叁个包,将包名传给test_suite,setuptools就能够神奇的将此包下的富有测试全体跑一边,那样自身事后再加测试脚本的时候一向就增添新的本子就好了,别的的都不须要转移了。

运作效果:

[email protected]:/mnt/d/Dropbox/Code/CentOS_code/VASPy$ python setup.py test
running test
running egg_info
creating vaspy.egg-info
writing vaspy.egg-info/PKG-INFO
writing top-level names to vaspy.egg-info/top_level.txt
writing dependency_links to vaspy.egg-info/dependency_links.txt
writing manifest file 'vaspy.egg-info/SOURCES.txt'
reading manifest file 'vaspy.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'vaspy.egg-info/SOURCES.txt'
running build_ext
test_compare (tests.incar_test.InCarTest)
Make sure we can compare two InCar objects correctly. ... ok
test_eq (tests.incar_test.InCarTest)
Test __eq__() function. ... ok
...
此处省略若干输出

----------------------------------------------------------------------
Ran 22 tests in 3.574s

OK

发表本身的python包

  1. 第二先去PyPI注册帐号

  2. 配置~/.pypirc如下:

    [distutils]
    index-servers =
    pypi
    pypitest

    [pypi]
    username:ShaoZhengjiang
    password:mypassword

    [pypitest]
    username:ShaoZhengjiang
    password:mypassword

  3. 接下来注册并上传本人的包到测试服务器

pypi提供了多少个测试服务器,大家可以在这几个测试服务器上做测试。

python setup.py register -r pypitest

然后

python setup.py sdist upload -r pypitest

若未有失水准大家理应不会博得别的错误。

  1. 上传至PyPI

若上边的测试成功,我们就足以依据同等的手续将包注册并上传。

python setup.py register -r pypi
python setup.py sdist upload -r pypi

Ok,之后大家就可以在PyPI(

前言
前几天把团结的VASP文件处理库进行了包装并上传来PyPI,现在得以向来通过pip和easy_install来安装…

已经一同到gitbook,想阅读的请转到gitbook: Django 一.拾普通话文书档案

This advanced tutorial begins where Tutorial
7
left off. We’ll be turning our Web-poll into a standalone Python package
you can reuse in new projects and share with other people.

紧接着教程7,从那只后大家先河高档教程部分。大家将投票应用做成1个单身的python包,你能够在新类型利用,或享受给别的人。

If you haven’t recently completed Tutorials 1–7, we encourage you to
review these so that your example project matches the one described
below.

假定您还未到位课程一-柒,大家建议你到家它们,让你的言传身教项目与下部描述的一样

Reusability matters¶

可选取很重大¶

It’s a lot of work to design, build, test and maintain a web
application. Many Python and Django projects share common problems.
Wouldn’t it be great if we could save some of this repeated work?

陈设、塑造、测试和保卫安全1个网页应用必要做过多行事。诸多Python 和 Django
项目都会遇见有的共性难题。假设大家能不另行的造轮子,岂不是很棒。

Reusability is the way of life in Python. The Python Package Index
(PyPI) has a
vast range of packages you can use in your own Python programs. Check
out Django
Packages
for existing reusable apps you could incorporate in your project. Django
itself is also just a Python package. This means that you can take
existing Python packages or Django apps and compose them into your own
web project. You only need to write the parts that make your project
unique.

可重用性在Python 中是一种常见的主意。
Python包索引
(PyPI)网站具备大批量的包,你能够在你自个儿的Python程序中选取。
查看一下Django
Packages中已经存在的可选取的施用,你可以把它们放到你的体系中。
Django 自己也只是3个Python 包。
那代表你能够博得已经存在的Python包和Django应用并将它们融入到你和谐的网页项目。你只需求编写制定你项指标独有的壹对代码。

Let’s say you were starting a new project that needed a polls app like
the one we’ve been working on. How do you make this app reusable?
Luckily, you’re well on the way already. In Tutorial
3,
we saw how we could decouple polls from the project-level URLconf using
an include. In this tutorial, we’ll take further steps to make the app
easy to use in new projects and ready to publish for others to install
and use.

要是说你正在初始2个新的品种,须要四个像我们正在编写制定的投票应用。你如何让该利用可采纳?幸运的是,其实您曾经在那条道路上了。在教程
3
中,大家看来我们能够什么采纳include将投票应用从品种等级的U昂CoraLconf
解耦。在本教程中,大家将尤其令你的施用更便于复用到新的花色中,而且能够公布给另旁人设置和动用。