当前位置: 澳门新濠3559 > 服务器运维 > 正文

接下来是打包库需要的一些文件,可以将那些以

时间:2019-11-08 22:07来源:服务器运维
亲自动手写一个python库(二),动手写python库 引言 经过上一节中所述,我们搭建好了一个Python环境用于库开发,我们在这一节真正开始搭建一个库,并将其发布。 项目文档结构 首先我

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

引言

经过上一节中所述,我们搭建好了一个Python环境用于库开发,我们在这一节真正开始搭建一个库,并将其发布。

项目文档结构

首先我们先构建出自己项目的文档结构,首先是LICENSE和README.md,这两个文件并不是必要的,但是最好将其加上,方便别人了解你的项目。README.md是关于本项目的介绍,LICENSE是表示该项目所遵循的开源协议,一般MIT用的比较多,其他协议你可以百度谷歌了解一下。

接下来是打包库需要的一些文件,主要有MANIFEST.in和setup.py两个文件。MANIFEST.in表示打包时不会被自动包含进去的附加文件清单。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上注册一个帐号,并在本地用户根目录下创建文件接下来是打包库需要的一些文件,可以将那些以后可以用到的内容做成一个python包。~/.pypirc,这样以后就不需要输入帐号密码了。

接下来,需要在PyPI网站上注册一个项目,网站提供三种方式注册,选择一种即可,最简单的是通过上传打包时生成的PKG-INFO文件,生成项目信息。此步骤只需在第一次发布时操作。

接下来就是最后一步,上传打包好的库。我们这里是用twine,如果环境中没有安装,需要先采用pip install twine安装即可。

此时在网页上就可以看到自己的源代码包啦,并且可以通过使用pip install packagename,就可以使用我们自己写的Python库了。

祝大家玩的开心,希望大家能到Github上帮忙点个赞。

作者:Gutierrez

来源:


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

马哥教育2018年Python自动化运维开发实战面授班2018年3月5号开班,马哥联合BAT、豆瓣等一线互联网Python开发达人,根据目前企业需求的Python开发人才进行了深度定制,加入了大量一线互联网公司:大众点评、饿了么、腾讯等生产环境真是项目,课程由浅入深,从Python基础到Python高级,让你融汇贯通Python基础理论,手把手教学让你具备Python自动化开发需要的前端界面开发、Web框架、大监控系统、CMDB系统、认证堡垒机、自动化流程平台六大实战能力,让你从0开始蜕变成Hold住年薪20万的Python自动化开发人才

扫描二维码领取学习资料**

更多Python好文请点击【阅读原文】哦

↓↓↓

1 可重用性

  一个WEB应用的工作包含了诸多内容, 如设计, 构建, 测试和维护

  如果能够避免做一些重复的事情, 那将省时省力

  因此我们在完成一个项目之后, 可以将那些以后可以用到的内容做成一个python包, 以后遇到此类问题就可以直接使用该包

  那么我们将有更好的工作效率, 对于Python包这样的内容, 就是可重用的

  那么如果将那些可重用的内容分离出来, 就是我们要做的内容了

  经过之前的内容, 现在我们的mysite的目录结构Wie

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

 

  可见polls应用几乎是个独立的了, 现在都可以直接复制给别的项目并且能够立即使用(模板等文件都在应用内, 只需将配置好URLs)

  但是直接复制不够专业, 我们可以将polls打包

  我们推荐使用setuptools来打包  

在上一篇文章中,我们介绍了 Python 的 元组拆包、三元运算符和对 Python 的 else 语句进行了深入讲解,现在我们介绍 Python 的 __main__ 模块、常用第三方模块和打包发布。
查看上一篇文章请点击:

2 打包程序

  1) 在项目外创建一个文件夹django-polls

    关于命名: 需要先检查PyPI这样的资源, 避免同名

    同时用分隔符分割这样也便于识别内容内部

    应用程标签(Application labels)也需要注意不要和INSTALLED_APPS内使用相同的标签

  2) 将polls移动到django-polls文件夹

  3) 创建 django-polls/README.rst

  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
-----------

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.

  4) 创建 django-polls/LICENSE

  没有公开许可发布的代码是无用的

  5) 创建一个setup.py文件

  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',
    ],
)

  6) 创建MANIFEST.in文件  

  django-polls/MANIFEST.in

include LICENSE
include README.rst
recursive-include polls/static *
recursive-include polls/templates *

  7) 建议在应用程序中包含详细文档, 可以创建目录django-polls/docs来包含文档

  需要在 django-polls/MANIFEST.in 添加一句话

recursive-include docs *

  8) 创建包

python setup.py sdist

  执行完毕之后会产生一个dist目录和一个新包 django-polls-0.1.tar.gz

__main__ 模块
大多数 Python 代码要么是导入的模块,要么是执行某些任务的脚本。但是,有时需要使一个文件既可以作为模块导入,也可以作为脚本运行。

3 使用包

  现在清除掉项目中的polls, 安装我们打包好的看是否能正常运行

  1) 安装包

pip install --user django-polls/dist/django-polls-0.1.tar.gz

  2) 运行项目测试

  3) 卸载

pip uninstall django-polls
def sayHello(): str = "hello" printif __name__ == "__main__": print('This is main of module "hello.py"')

4 发布包

  一般可以将包发布到PyPI中  

  具体教程为

运行结果:

5 virtualenv

  安装包多了可能出现冲突问题, 比如同一个包只能装一个版本

  而你的项目一个需要这个版本, 一个需要另一个版本

  此时可以使用virtualenv, 此工具允许维护使用多个独立的Python环境, 每个环境都有自己的库和包命名空间的副本

 

>>>This is main of module "hello.py">>>

当 Python 解释器读取源文件时,它会执行它在文件中找到的所有代码。在执行代码之前,它定义了一些特殊的变量。
例如,如果 Python 解释器将该模块 作为主程序运行,它将一个特殊的 __name__ 变量设置为字符串值 "__main__"。如果该文件是从另一个模块导入的,__name__ 将设置为该模块的名称。
如果我们把上一个例子的代码使用一个文件名为 cmd.py 保存,使用名字 cmd 可以导入到另一个脚本作为一个模块。
cmd.py

def sayHello(): str = "hello" printif __name__ == "__main__": print('This is main of module "hello.py"')

cmd_hello.py

import cmdcmd.sayHello()

运行结果:

>>>hello>>>

我们创建了一个模块 cmd 并通过另外的脚本来调用。

常用第三方模块
除了内建的模块外,Python 还有大量的第三方模块。
Django 是 Python 最常用的 Web 框架,它支持 instagramDisqus等网站运行。它有许多非常有用的特性,并且它缺少的特性都可由它的扩展包来满足。CherryPyFlask 同样也是非常流行的 Web 框架。
如果要从网上爬取数据 BeautifulSoup 模块将帮你省很多力气,这比用正则表达式构建自己的数据提取规则要好得多。

虽然 Python 提供了以编程方式访问网站 的模块,但它们的使用非常麻烦。使用第三方库 request 会使 HTTP 请求变得更加容易。

有许多第三方模块可以帮助 Python 实现科学和数学计算。matplotlib 模块允许你使用 Python 来创建 2D 图形。模块 Numpy 允许使用比原生 Python 解决方案快得多的多维数组,同时它还包含执行数学操作的函数,例如对数组的矩阵转换。模块 SciPy 包含对 NumPy 功能的很多扩展。
Python 同样可以用来做游戏开发,它通常被用来作为使用其它语言编写有些的脚本语言,但也可以用来自己制作游戏。

Panda 3D 模块帮助你建立 3D 游戏,pygame 帮助你建立 2D 游戏。

打包发布
在 Python 中,打包一词是指将您编写的模块以标准格式编写,以使其他程序员能够轻松地安装和使用它们。这涉及到模块、setuptools 和 distutils 的使用。
打包的第一步是正确组织文件。将要放入库中的所有文件放在同一个父目录中。该目录还应该包含一个名为 __init__.py 的文件,该文件可以是空的,但必须存在与目录中。这个目录放在另一个包含自述文件和许可文件的目录下,同时还有一个非常重要的文件 setup.py。目录结构如下。
Foo/
|-- bin/
| |-- foo
|
|-- foo/
| |-- tests/
| | |-- __init__.py
| | |-- test_main.py
| |
| |-- __init__.py
| |-- main.py
|
|-- docs/
| |-- conf.py
| |-- abc.rst
|
|-- setup.py
|-- requirements.txt
|-- README
简要解释一下:
1、 bin/: 存放项目的一些可执行文件,当然你可以起名script/之类的也行。
2、 foo/: 存放项目的所有源代码。 源代码中的所有模块、包都应该放在此目录。不要置于顶 层目录。 其子目录tests/存放单元测试代码; 程序的入口最好命名为 main.py。
3、 docs/: 存放一些文档。
4、 setup.py: 安装、部署、打包的脚本。
5、 requirements.txt: 存放软件依赖的外部Python包列表。
6、 README: 项目说明文件。

您可以根据需要在目录中放置很多的 Python 脚本文件。

下一步是在 setup.py 文件里写打包指令,里面包含了软件包所需的信息,以便将其上传到 PyPI 并通过 pip 安装。

from distutils.core import setupsetup( name='cmd', version='1.0', description='sdk for di input , output and param', author='ZS', author_email='ZS@qq.com', url='', license='No License', platforms='python 3.7', py_modules=['factory'], package_dir={'': 'pack'}, packages=['lib', 'common.http'])

创建 澳门新濠3559,setup.py 文件后,可将其上传到 PyPI 上,或使用命令行构建二进制的发行版 。
要构建一个发行版,请使用命令行进入到包含 setup.py 的目录,并运行命令 python setup.py sdist 创建源码分发包,Windows 下可运行 python setup.py bdist_wininst 来构建二进制的发行版。
使用 python setup.py register 注册账号,使用 python setup.py sdist upload 上传大家可下载的发行版。
前面介绍了是其他 Python 程序员使用的模块打包方法。如果你的用户不是程序员,那么他的计算机大多数没有安装 Python。因此,需要将脚本打包为相关平台 (如 Windows) 的可执行文件。
在 Windows 平台上,有许多工具可用于将 Python 脚本转换为可执行文件。py2exe 可以用来将 Python 脚本和它所需的库打包到单个可执行文件中,你也可以用 PyInstallercx_Freeze

对于 Linux 或 Max 用户来说这是不必要的,因为大多数用户都安装了 Python。

“一些人总是找无数理由放弃自己想做的事情,实际上他们只需要一个理由放手去做。” -- 玛莎·葛兰姆

编辑:服务器运维 本文来源:接下来是打包库需要的一些文件,可以将那些以

关键词: