LICENSE是表示该项目所遵循的开源协议betway体育

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

引言

透过上黄金年代节中所述,大家搭建好了二个Python情状用于库开采,我们在这里生机勃勃节真正初阶搭建贰个库,并将其公布。

体系文书档案结构

率先大家先营造出团结项目标文书档案结构,首先是LICENSE和README.md,那多个文本而不是必得的,不过最为将其拉长,方便旁人通晓你的品类。README.md是有关本项目的牵线,LICENSE是意味着该项目所依据的开源契约,日常MIT用的可比多,其余协商你能够百度Google询问一下。

接下去是打包库需求的一些文书,重要有MANIFEST.in和setup.py八个公文。MANIFEST.in表示打包时不会被电动满含进去的附Gavin件清单。setup.py是包裹程序配置文件,供给安装有个别抉择。其他,setup.cfg是包涵setup.py额外界署音讯的文件,作者还未有用到这些中的装置,所以本项目中其是空的。

caafinder文件夹正是大家要写的Python程序,大家要在乎那么些文件夹里必得有__init__.py那几个文件。

上边是一下子setup.py的部分总结安顿选项,详细请参谋官方文档。

能够参见一下:

  • PyPA sample project这是一个合法示例库结构。

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

至于模块

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

你大概还想到,倘诺分裂的人编写的模块名相近怎么做?为了幸免模块名冲突,Python又引进了按目录来公司模块的形式,称为包(Package卡塔 尔(阿拉伯语:قطر‎,包是叁个富含__init__.py的公文夹,如图汉语档所示,我们有一个包caafinder,因为它的子级有叁个__init__.py,包caafinder具有database和workspace多少个模块。__init__.py可以是空文件,也足以有Python代码,因为__init__.py本人正是三个模块,而它的模块名正是caafinder。

程序打包

经过实行下列语句来开展包装:

此中xxx能够是下列三种办法中内部二个:

举个例证:

那时候在根目录出现了dist文件夹,里面有name-version.tar.gz那些文件,那就是大家要宣布到PyPI的压缩包了。

-

发布到PyPI

先是我们供给在PyPI上登记多少个帐号,并在本地客商根目录下开创文件~/.pypirc,那样之后就无需输入帐号密码了。

接下去,须要在PyPI网址上登记叁个门类,网址提供二种办法注册,接收意气风发种就可以,最简便易行的是透过上传打包时生成的PKG-INFO文件,生成项目音信。此步骤只需在首先次揭橥时操作。

接下去正是最终一步,上传打包好的库。大家这里是用twine,假使条件中从未设置,须求先接纳pip install twine安装就能够。

那会儿在网页上就足以观望自身的源代码包啦,並且能够通过运用pip install packagename,就足以行使我们和好写的Python库了。

祝大家玩的欢跃,希望大家能到Github上支持点个赞。

作者:Gutierrez

来源:


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

马哥教育二零一八年Python自动化运行开辟实战面授班二零一八年二月5号发轫,马哥联合BAT、豆瓣等一线网络Python开垦达人,依据当下商家须求的Python开辟人才进行了深度定制,加入了大气细微互连网集团:大众点评、饿了么、Tencent等生育情状真是品种,课程奉公守法,从Python基本功到Python高端,让您融汇贯通Python底工理论,手把手传授让你有着Python自动化开采须求的前端分界面开拓、Web框架、大监督系统、CMDB系统、认证壁垒机、自动化流程平台六大实战技术,让您从0开端蜕形成Hold住年收入20万的Python自动化开拓人才

极目远望二维码领取学习质感**

越来越多Python好文请点击【阅读原版的书文】哦

↓↓↓

包装宣布Python模块的方法详细解释,python精解

前言

不久前把团结的VASP文件管理库开展了包装并上传来PyPI,现在可以一向通过pip和easy_install来安装VASPy啦(同期迎接使用VASP做总括化学的童鞋们加星和出席进来卡塔尔,

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

是因为投机的回忆力真是不咋地,怕时间久了就忘了,于是在那地时不我待以温馨的VASPy程序为例对python的卷入和上传举办下总计。

VASPy包文件结构

第豆蔻梢头写贴上来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.9可能>=3.4,setuptools和pip是曾经设置好的,大概须求张开改良到新型版本

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

实际还有黄金时代种情势正是运用pandoc将markdown转变来rst格式,后生可畏种便利的措施正是行使pyandoc模块在拆穿的时候自动调换。
具体方法能够参见:Use 马克down 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/

此文件夹也是贰个子包,富含了单元测量试验脚本,为了能利用python setup.py test实行单元测量试验,特意加多了__init__.pys使其变为叁个包。

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

这些参数提供了大器晚成多元的归类,在PyPI上会将其放入不一样的目录中讲项目开展分类。
具体的categories的称号和准绳参谋:

test_suite

本条参数能够扶植大家使用

python setup.py test

来跑单元测量试验,再也没有须求单独再写二个本子比方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.那样大家就足以独自写多个函数,将多少个测量检验用例归总成一个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来安装...

发布你的运用¶

Now that we’ve packaged and tested django-polls, it’s ready to share with the world! If this wasn’t just an example, you could now:

这两天你已经打包并测量试验了django-polls,它早就筹划好公开拓布到全世界了!如果这不然则例证,你今后得以:

  • Email the package to a friend.

  • 邮件发送给你的心上人

  • Upload the package on your website.

  • 上传到您的站点

  • Post the package on a public repository, such as the Python Package Index (PyPI). packaging.python.org has a good tutorial for doing this.

交付到叁个理解的宾馆源。 the Python Package Index (PyPI). packaging.python.org 有二个格外好的教程 a good tutorial

2.10.4 打包你的app

装进的意趣是令你的app具备大器晚成种非常的格式,使得它更便于被设置和接受。

  1. 第风姿浪漫,在Django项目外面,为您的polls应用,准备三个父目录,取名django-polls;

    为你的app接受一个相宜的名字:
    在取名前,去PYPI寻觅一下是还是不是有重名或冲突的包已经存在。建议给包名加上“django-”的前缀。名字中最后三个圆点的前面部分在INSTALLED_APPS中料定要并世无两,无法和别的Django的contrib packages中的重名,举个例子auth、admin、messages等等你。

  2. 拷贝polls目录到该目录内;

  3. 开创八个文件django-polls/README.rst,写入下边包车型大巴剧情:

Polls

Polls is a simple Django app to conduct Web-based polls. For each
question, visitors can choose between a fixed number of answers.
Detailed documentation is in the "docs" directory.
Quick start
-----------
64 Chapter 2. Getting started
Django Documentation, Release 1.10.2a1
1. Add "polls" to your INSTALLED_APPS setting like this::
INSTALLED_APPS = [
...
'polls',
]
2. Include the polls URLconf in your project urls.py like this::
url(r'^polls/', include('polls.urls')),
3. Run `python manage.py migrate` to create the polls models.
4. Start the development server and visit http://127.0.0.1:8000/admin/
to create a poll (you'll need the Admin app enabled).
5. Visit http://127.0.0.1:8000/polls/ to participate in the poll.
  1. 创立四个django-polls/LICENSE版权评释文件。大大多Django相关的app都依据BSD版权。
  2. 接下去创设叁个setup.py文件,用于编译和安装app。如何创制那个,请前往setuptools的法定文书档案获取详细的课程,本文不关乎。具体内容如下:

django-polls/setup.py

import os
from setuptools import find_packages, setup

with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme:
    README = readme.read()

# allow setup.py to be run from any path
os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))

setup(
    name='django-polls',
    version='0.1',
    packages=find_packages(),
    include_package_data=True,
    license='BSD License', # example license
    description='A simple Django app to conduct Web-based polls.',
    long_description=README,
    url='https://www.example.com/',
    author='Your Name',
    author_email='yourname@example.com',
    classifiers=[
        'Environment :: Web Environment',
        'Framework :: Django',
        'Framework :: Django :: X.Y', # replace "X.Y" as appropriate
        'Intended Audience :: Developers',
        'License :: OSI Approved :: BSD License', # example license
        'Operating System :: OS Independent',
        'Programming Language :: Python',
        # Replace these appropriately if you are stuck on Python 2.
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.4',
        'Programming Language :: Python :: 3.5',
        'Topic :: Internet :: WWW/HTTP',
        'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
    ],
)
  1. 暗许唯有python的模块和包会被打包进大家的app内。为了包括部分附加的文书,供给成立叁个MANIFEST.in文件。为了将静态文件,模板等等非python语言编写的公文打包入内,大家须要在django-polls/MANIFEST.in文件内写入:
    include LICENSE
    include README.rst
    recursive-include polls/static *
    recursive-include polls/templates *
  1. 该手续可选,然而刚烈推荐,将详细的求证文书档案一同打包。创立三个空的目录django-polls/docs,用于放置你的app相关文书档案。相同的时间不要忘记了,在django-polls/MANIFEST.in文件内写入风姿浪漫行recursive-include docs *。供给在乎的是,假诺docs目录是空的,那么它不会被打包进去。当然,多数apps通过在线的网址提供文书档案阅读。
  2. 在您的django-polls目录内,运营python setup.py sdist命令。那将会创建一个dist目录,并编写翻译成功你的新包,django-polls-0.1.tar.gz。

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.

2.10.2 你的档案的次序和可选择的app

透过后边的教程,你的品类布局如下:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    polls/
        __init__.py
        admin.py
        migrations/
            __init__.py
            0001_initial.py
        models.py
        static/
            polls/
                images/
                    background.gif
                style.css
        templates/
            polls/
                detail.html
                index.html
                results.html
    tests.py
    urls.py
    views.py
    templates/
        admin/
            base_site.html

它早已具有的project和app分离的法规。不过还须要三个打包的历程。

利用你和煦的包¶

Since we moved the polls directory out of the project, it’s no longer working. We’ll now fix this by installing our new django-polls package.

鉴于大家将polls目录移出了品种,它已无能为力符合规律使用。大家前日因此设置大家新创设的django-polls包来修补这么些主题素材。

Installing as a user library

用效率户级其他库安装

The following steps install django-polls as a user library. Per-user installs have a lot of advantages over installing the package system-wide, such as being usable on systems where you don’t have administrator access as well as preventing the package from affecting system services and other users of the machine.

以下的手续将设置django-polls 成有个别顾客的库。客户级其余设置比系统等第的设置有繁多优点,举个例子将包运维在普通客商品级上不但不会影响系统服务还不会耳濡目染其余客户

Note that per-user installations can still affect the behavior of system tools that run as that user, so virtualenv is a more robust solution (see below).

只顾依据客商的安装还是能够影响以该客户地点运营的系统工具,所以virtualenv 是越来越硬朗的化解办法(见下文卡塔尔国。

  1. To install the package, use pip (you already installed it, right?):

用pip命令来安装包(你曾经设置了,对吧?卡塔 尔(英语:State of Qatar)

pip install --user django-polls/dist/django-polls-0.1.tar.gz
  1. With luck, your Django project should now work correctly again.
    Run the server again to confirm this.
    幸运的是,你的Django项目又再一次正常办事了。你能够运维服务器来验证。

  2. To uninstall the package, use pip:

用以下命令卸载那些包:

pip uninstall django-polls

2.10.5 使用你自个儿的包

在安装包的时候,最佳是以个人身份安装,并不是全系统范围的地点。那样能够有效压缩给别的顾客带去的震慑或被别的顾客影响。当然,最棒的艺术是在virtualenv情况下,相近隔绝的沙盒景况。

  1. 使用pip安装:pip install --user django-polls/dist/django-polls-0.1.tar.gz
  2. 目前您能够在等级次序中运用那个包了
  3. 卸载:pip uninstall django-polls

Publishing your app¶

2.10.3 安装一些必不可缺乏工人具

应用setuptools和pip来打包我们的app。请先安装他们。

Using your own package¶

2.11 接下去学如何

本节首要介绍Django文书档案的划分,各部分的重心,怎么着找到自个儿感兴趣的内容。
由于此部分和文书档案最前面包车型客车目录导航重复非常多,并且比较简单,就不翻译了。

2.11.1 在文书档案中搜索
2.11.2 文书档案是怎么组织的
2.11.3 文书档案是何等修改的
2.11.4 从哪儿获得文书档案
2.11.5 差别版本之间的分别

本文由必威发布于必威-运维,转载请注明出处:LICENSE是表示该项目所遵循的开源协议betway体育

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。