前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >通过demo学习OpenStack开发

通过demo学习OpenStack开发

作者头像
py3study
发布于 2020-01-06 03:59:48
发布于 2020-01-06 03:59:48
1.3K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

为什么写这个系列

OpenStack是目前我所知的最大最复杂的基于Python项目。整个OpenStack项目包含了数十个主要的子项目,每个子项目所用到的库也不尽相同。因此,对于Python初学者和未接触过OpenStack项目的人来说,入门的难度相当大。

幸运的是,OpenStack中的项目有很多共同点。比如,它们有相同的代码库结构,都尽可能是用同样的库,配置文件和单元测试的规范也都几乎一样。因此,通过学习这些共通的部分,我们就可以快速掌握多个OpenStack项目。但是,万事开头难,学习这些基础知识总是痛苦的。不过,学习的难点并不在于这些知识点本身有多难理解,而是这些基础知识的应用场景和应用效果对初学者来说都是模糊的。这个系列文章的目的就是帮助有需要的人了解OpenStack中一些常见的知识点。理解过程就是通过动手做一个web application demo来实现的。

这个系列文章会涉及到以下的知识点:

  • 包管理和pbr
  • WSGI, RESTful Service和Pecan框架
  • eventlet
  • SQLAlchymy
  • 单元测试

下面的知识点是不会专门讲的,如果有遇到不会的请自学:

  • git

软件包管理

软件包管理是每个OpenStack项目的基础,其目的是用来将项目代码打包成源码包或者二进制包进行分发。一个项目的代码可能会被打包放到PyPI上,这样你可以通过pip命令安装这个包;也可能会被打包放到项目的软件仓库里,这样你可以通过apt-get install或者yum install来安装这个软件包。

不幸的是,Python在软件包管理十分混乱,至少历史上十分混乱。原因有两个:一是标准库提供的软件包管理功能十分弱,二是官方没有提供统一的软件包管理标准。对于这个领域,我曾经也是混乱的,只知道使用easy_installpip来安装软件包。不过自从看了The Hacker's Guide to Python(《Python高手之路》)之后,算是知道点来龙去脉。

软件打包工具的历史

这里我会讲一下我知道的Python的软件打包工具的历史,我们按照历史顺序来叙述。

distutils (before 2000)

disutils自从1998年起就是Python标准库的一部分了,不过它在2000年就停止了开发。disutils是最早的Python打包工具和标准,也奠定了对Python软件进行打包的一个基本工作方式:使用setup.py文件。来看一个setup.py文件的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from disutils.core import setup

setup(name='webdemo',
      description='A simple web demo.',
      author='author name',
      author_email='author_name@example.com'
      url='http://example.com',
      packages=['webdemo'])

setup.py文件是放在项目根目录下的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
~/programming/python/webdemo git:(master) ✗ $ ls
LICENSE  README.md  setup.py  webdemo 

然后你就可以使用命令python setup.py build来编译包,可以使用python setup.py install来安装这个项目。如果需要帮助,可以通过python setup.py --help-commands来查看支持的命令。

setuptools

disutils停止开发后,setuptools成了继任者。setuptools提供了很多高级功能,包括自动依赖处理、Egg分发格式以及easy_install命令。setuptools的使用方式和disutils差不多,也是以一个setup函数作为入口,只不过该函数来自于setuptools模块,而且支持更多的参数,比如classifiers, setup_requires等,参数更多意味着功能更多。

后来有一段时间setuptools项目发展开始变得缓慢了,就有人从setuptools项目创建了distribute项目。distribute开始支持Python 3等新特性。不过一段时间后,distribute项目又和setuptools项目合并了(2013年3月)。因此,现在已经不存在distribute项目了。

到目前为止,setuptools还是使用最多的打包工具,而且开发很活跃,2015年6月刚刚发布了18.0版本。setuptools项目的文档在:http://pythonhosted.org/setuptools/。OpenStack目前也是使用setuptools库来执行打包操作,我们下面会详细点介绍setuptools工具。

disutils2

在setuptools项目发展的过程中,有一个叫disutils2的项目也在并行开发中,其目的是全面取代Python标准库中的distutils。disutils2的最大改进是将setup函数的参数单独放到一个setup.cfg的文件中(这些成为包的元数据)。不够disutils2这个项目缺点很多,而且没有功能上还不如setuptools项目,所以在2012年的时候,这个项目被废弃了。

distlib

这个是一个新的打包工具,目标也是取代disutils。不过这个项目的开发进展也不快,到2015年才发布了0.2.0版本。目前还未能并入到Python的标准库中。不过可以保持关注。项目文档地址:https://readthedocs.org/projects/distlib/

在OpenStack中使用打包工具

前面已经提到了,OpenStack也是使用setuptools工具来进行打包,不过为了满足OpenStack项目的需求,引入了一个辅助工具pbr来配合setuptools完成打包工作。

pbr (Python Build Reasonableness)

pbr是一个setuptools的扩展工具,被开发出来的主要目的是为了方便使用setuptools,其项目文档地址也在OpenStack官网内:http://docs.openstack.org/developer/pbr/

先说一下pbr如何使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import setuptools

setuptools.setup(setup_requires=['pbr'], pbr=True)

按照上面的方式就可以配置setuptools工具使用pbr来协助完成打包工作。这里的setup_requires参数意思是setup函数在执行之前需要依赖的包的列表。这里的依赖的包的功能可以理解为生成setup的实际参数。你可以看到,当使用pbr的时候,setup函数只有两个参数,然而实际上setuptools.setup函数实际上是disutils.core.setup函数,会接收任何参数,这些参数可以通过在调用时指定,也可以通过所依赖的扩展来生成(比如pbr)。

那么OpenStack社区为啥要开发pbr呢?因为setuptools库使用起来还是有点麻烦,参数太多,而且直接通过指定setup函数的参数的方法实在太不方便了。pbr就是为了方便而生的,它带了了如下的改进:

  1. 使用setup.cfg文件来提供包的元数据。这个是从disutils2学来的。
  2. 基于requirements.txt文件来实现自动依赖安装。requirements.txt文件中包含了一个项目所要依赖的库,这个文件的格式是和pip兼容的。
  3. 利用Sphinx实现文档自动化。
  4. 基于git history自动生成AUTHORS和ChangeLog文件。
  5. 针对git自动创建文件列表。
  6. 基于git tags的版本号管理。
pbr的版本推导

这里重点说明一下基于git tag的版本号管理这个功能。当使用pbr的时候,版本号有两种方式:postversioningpreversioning,postversioning是默认方式。要是用preversioning的方式,则需要设置setup.cfg文件中的*metadata]段的version字段的值*。无论采用哪种方式,版本号都是从git的历史推理得到的。pbr使用的版本号标准是[Linux/Python Compatible Semantic Versioning 3.0.0,简单的说就是下面这个标准:

Given a version number MAJOR.MINOR.PATCH, increment the:

  1. MAJOR version when you make incompatible API changes,
  2. MINOR version when you add functionality in a backwards-compatible manner,
  3. and PATCH version when you make backwards-compatible bug fixes.

pbr的版本推导按照如下的步骤进行(注意,最终版本号才是软件包的版本号):

  1. 如果设置version的值为一个给定的版本号,且这个版本号刚好对应一个tag,则这个值就是最终版本号(注意,这里只有签名的tag才有效)。
  2. 如果不是上面情况,则pbr会找到最近的一个tag,然后为其MINOR值加1得到一个比它大的最小版本号(注意,这个还不是最终版本号)。
  3. 然后pbr会从最近的一个tag开始遍历所有的git commit,并检查每个提交的commit message,在commit message中查找Sem-Ver:这样的行:
  • 如果Sem-Ver的值是bugfix,则会增加版本号中PATCH部分的值。
  • 如果Sem-Ver的值是feature或者deprecation,则会增加版本号中MINOR部分的值。
  • 如果Sem-Ver的值是api-break,则会增加版本号中MAJOR部分的值。
  • 如果Sem-Ver行不存在,则认为值是bugfix
  • 如果Sem-Ver的值不在上面列出的范围内,则会给出警告。
  1. 如果使用的是postversioning的方式,也就是setup.cfg中不指定version的值,则pbr会使用规则3推导出来的值作为目标版本号(只是目标版本号,不是最终版本号)。
  2. 如果使用的是preversioning的方式,也就是setup.cfg中指定了version的值(而且不符合规则1),则会检查指定的version是否高于规则3推导出来的版本号,如果没有,则会抛出异常,如果有,则使用指定的版本号作为目标版本号。
  3. 在得到目标版本号之后,开始计算开发版本号。开发版本号的形式如下:MAJOR.MINOR.PATCH.devN。这里要计算的是devN中的N。这个值等于从最近的git tag开始的提交数量。计算完开发版本号之后,就得到了最终版本号。

总的来说,从上面的规则计算出来的版本号只有两种形式,一种是发布版本号(对应到某个tag),另一种是开发版本号。注意:pbr要求tag都是要签名的,也就是打tag时要使用git tag -a -s X.Y.Z的形式。

setup.cfg和requirements.txt

setup.cfg

由于OpenStack项目都使用了setuptools和pbr来执行打包工作,因此项目的元数据都放在setup.cfg文件中。我们以keystone项目的setup.cfg文件为例来说明这个文件里一般会包含什么内容。以下是写这篇文章时最新的keystone项目的setup.cfg文件的内容(以#开头的是我加的注释):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[metadata]  # 元数据段
name = keystone  # 软件包名称
version = 8.0.0  # 软件包版本号,还可以指定preversoining, postversioning等值,具体的作用看pbr的文档。
summary = OpenStack Identity  # 简介
description-file =  # 指定README文件
    README.rst
author = OpenStack  # 作者
author-email = openstack-dev@lists.openstack.org  # 作者邮件
home-page = http://www.openstack.org/  # 主页
classifier =  # 包的分类,下面具体说
    Environment :: OpenStack
    Intended Audience :: Information Technology
    Intended Audience :: System Administrators
    License :: OSI Approved :: Apache Software License
    Operating System :: POSIX :: Linux
    Programming Language :: Python
    Programming Language :: Python :: 2
    Programming Language :: Python :: 2.7

[files]  # 文件段
packages =  # 包名称
    keystone

[global]  # 全局段
setup-hooks =  # 指定安装hook
    pbr.hooks.setup_hook


[egg_info]  # 指定egg信息
tag_build =
tag_date = 0
tag_svn_revision = 0

[build_sphinx]  # 文档build相关信息
all_files = 1
build-dir = doc/build
source-dir = doc/source

[compile_catalog]
directory = keystone/locale
domain = keystone

[update_catalog]
domain = keystone
output_dir = keystone/locale
input_file = keystone/locale/keystone.pot

[extract_messages]
keywords = _ gettext ngettext l_ lazy_gettext
mapping_file = babel.cfg
output_file = keystone/locale/keystone.pot
copyright_holder = OpenStack Foundation
msgid_bugs_address = https://bugs.launchpad.net/keystone

# NOTE(dstanek): Uncomment the [pbr] section below and remove the ext.apidoc
# Sphinx extension when https://launchpad.net/bugs/1260495 is fixed.
[pbr]  # pbr本身的配置
warnerrors = True
autodoc_tree_index_modules = True

[entry_points]  # 指定入口点
console_scripts =  # 指定要生成的可执行文件
    keystone-all = keystone.cmd.all:main
    keystone-manage = keystone.cmd.manage:main

# 下面是其他entry_points内容,主要用于指定不同功能的扩展,和打包无关。
...

(上面有些未注释的部分我目前还不太清楚,后续补充,可以先参考PEP301)

这里说说一下classifier这个参数。这个参数是用来指定一个软件包的分类、许可证、允许运行的操作系统、允许运行的Python的版本的信息。这些信息是在一个叫trove的项目。关于Python和trove的关系,请参考http://stackoverflow.com/questions/9094220/trove-classifiers-definition

你可以在PyPI上找到完整的classifier值列表,地址是:https://pypi.python.org/pypi?%3Aaction=list_classifiers。另外,你也可以通过setuptools的命令来获取这个列表,在项目根目录下执行:python setup.py register --list-classifiers

requirements.txt

这个文件指定了一个项目依赖的包有哪些,并且支出了依赖的包的版本需求,可以看看keystone项目的requirements.txt:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# The order of packages is significant, because pip processes them in the order
# of appearance. Changing the order has an impact on the overall integration
# process, which may cause wedges in the gate later.

pbr<2.0,>=0.11
WebOb>=1.2.3
eventlet>=0.17.4
greenlet>=0.3.2
PasteDeploy>=1.5.0
Paste
Routes!=2.0,>=1.12.3
cryptography>=0.8.2 # Apache-2.0
six>=1.9.0
SQLAlchemy<1.1.0,>=0.9.7
sqlalchemy-migrate>=0.9.6
stevedore>=1.5.0 # Apache-2.0
passlib
python-keystoneclient>=1.6.0
keystonemiddleware>=1.5.0
oslo.concurrency>=2.1.0 # Apache-2.0
oslo.config>=1.11.0 # Apache-2.0
oslo.messaging!=1.12.0,>=1.8.0 # Apache-2.0
oslo.db>=1.10.0 # Apache-2.0
oslo.i18n>=1.5.0 # Apache-2.0
oslo.log>=1.2.0 # Apache-2.0
oslo.middleware!=2.0.0,>=1.2.0 # Apache-2.0
oslo.policy>=0.5.0 # Apache-2.0
oslo.serialization>=1.4.0 # Apache-2.0
oslo.service>=0.1.0 # Apache-2.0
oslo.utils>=1.6.0 # Apache-2.0
oauthlib>=0.6
pysaml2>=2.4.0
dogpile.cache>=0.5.3
jsonschema!=2.5.0,<3.0.0,>=2.0.0
pycadf>=0.8.0
msgpack-python>=0.4.0

软件包归档格式

Python的软件包一开始是没有官方的标准分发格式的。比如Java有jar包或者war包作为分发格式,Python则什么都没有。后来不同的工具都开始引入一些比较通用的归档格式。比如,setuptools引入了Egg格式。但是,这些都不是官方支持的,存在元数据和包结构彼此不兼容的问题。因此,为了解决这个问题,PEP 427定义了新的分发包标准,名为Wheel。目前pip和setuptools工具都支持Wheel格式。这里我们简单总结一下常用的分发格式:

  • tar.gz格式:这个就是标准压缩格式,里面包含了项目元数据和代码,可以使用python setup.py sdist命令生成。
  • .egg格式:这个本质上也是一个压缩文件,只是扩展名换了,里面也包含了项目元数据以及源代码。这个格式由setuptools项目引入。可以通过命令python setup.py bdist_egg命令生成。
  • .whl格式:这个是Wheel包,也是一个压缩文件,只是扩展名换了,里面也包含了项目元数据和代码,还支持免安装直接运行。whl分发包内的元数据和egg包是有些不同的。这个格式是由PEP 427引入的。可以通过命令python setup.py bdist_wheel生成。

.egg-info和.dist-info目录

如果你到系统中安装Python库的路径下看看,就能看到很多名称以.egg-info或者以.dist-info结尾的目录。这些目录的内容就是这个库的元数据,是从库的分发包中拷贝出来的。其中.egg-info类型的目录来自于Egg格式的分发包,.dist-info类型的目录来自于Wheel格式的分发包。

软件包的安装

安装工具

上面已经提到了,setuptools项目提供了一个软件包安装工具*esay_install。easy_install支持从软件归档文件中或者从PyPI上安装软件包,不过这个工具并不好用,比如缺少卸载功能等,因此并不流行,现在更多的都是使用pip工具。

pip项目提供了很好的软件包安装方式,并且已经被包含到Python 3.4中,可以从PyPI、tarball或者Wheel归档中安装和卸载软件按包。关于pip常见的用法,这里就不赘述了(pip install, pip uninstall, pip search, ...)。

安装路径

软件包的安装路径依赖于操作系统、Python版本和安装方式。

  • Debian系的系统上(比如Ubuntu
    • 使用apt-get install从系统软件源安装
      • Python 2.7: /usr/lib/python2.7/dist-packages
      • Python 3.4: /usr/lib/python3.4/dist-packages
    • 使用pip install命令安装
      • Python 2.7: /usr/local/lib/python2.7/dist-packages
      • Python 3.4: /usr/local/lib/python3.4/dist-packages
    • 在virtualenv中使用pip install安装
      • Python 2.7: lib/python2.7/site-packages
      • Python 3.4: lib/python3.4/site-packages
  • CentOS系的系统上
    • 使用yum install命令安装
      • Python 2.7: /usr/lib/python2.7/site-packages

以开发模式安装

pip的安装命令可以使用-e选项,用来从本地代码目录或者版本库URL来安装一个开发版本的库。采用这种方式的时候,在安装目录下只会创建一个包含软件包信息的文件,真正的代码不会安装到系统目录下。

webdemo的打包管理

学习过包管理相关的知识后,我们就要以OpenStack的方法来创建一个我们自己的项目。这个项目的名称是webdemo,就是一个简单的web服务器。这个项目会贯穿这个系列文章。在本文中,我们首先要创建webdemo的项目框架并添加软件包管理相关的内容。

项目目录结构

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
~/programming/python/webdemo git:(master) ✗ $ tree .
.
├── LICENSE
├── README.md
├── requirement.txt
├── setup.cfg
├── setup.py
└── webdemo
    └── __init__.py

1 directory, 6 files

这个是一个最简单的Python项目目录:

  • 源代码放在子目录webdemo/
  • 然后包含了软件包管理的所需的文件:setup.py, setup.cfg, requirements.txt
  • LICENSE和README

软件包管理相关

首先是setup.py,就是这么简单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import setuptools


# In python < 2.7.4, a lazy loading of package `pbr` will break
# setuptools if some other modules registered functions in `atexit`.
# solution from: http://bugs.python.org/issue15881#msg170215
try:
        import multiprocessing  # noqa
except ImportError:
        pass


setuptools.setup(
    setup_requires=['pbr'], pbr=True)

然后是setup.cfg:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[metadata]
name = webdemo
version = 0.0.1
summary = Web Application Demo
description-file = README.md
author = author
author-email = author@example.com
classifier =
    Environment :: Web Environment
    Intended Audience :: Developers
    Intended Audience :: Education
    License :: OSI Approved :: GNU General Public License v2 (GPLv2)
    Operating System :: POSIX :: Linux
    Programming Language :: Python
    Programming Language :: Python :: 2
    Programming Language :: Python :: 2.7

[global]
setup-hooks =
    pbr.hooks.setup_hook

[files]
packages =
    webdemo

[entry_points]
console_scripts =

只包含最基本的信息。接下来是requirements.txt文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# The order of packages is significant, because pip processes them in the order
# of appearance. Changing the order has an impact on the overall integration
# process, which may cause wedges in the gate later.

pbr<2.0,>=0.11

目前只依赖于pbr库。源代码目录下现在只有一个空的__init__.py文件。我们已经搭建好了这个最简单的项目框架了。首先,我们要把这些代码提交到git库,然后打上tag 0.0.1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
~/programming/python/webdemo git:(master) ✗ $ git log --oneline
697427c Add packaging information
2cbbf4d Initial commit
➜ ~/programming/python/webdemo git:(master) ✗ $ git tag -a -s 0.0.1~/programming/python/webdemo git:(master) ✗ $ git tag
0.0.1

然后就可以使用python setup.py sdist命令来生成一个0.0.1版本的源码归档了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
~/programming/python/webdemo git:(master) ✗ $ python setup.py sdist
running sdist
[pbr] Writing ChangeLog
[pbr] Generating ChangeLog
[pbr] Generating AUTHORS
running egg_info
writing pbr to webdemo.egg-info/pbr.json
writing webdemo.egg-info/PKG-INFO
writing top-level names to webdemo.egg-info/top_level.txt
writing dependency_links to webdemo.egg-info/dependency_links.txt
writing entry points to webdemo.egg-info/entry_points.txt
[pbr] Processing SOURCES.txt
[pbr] In git context, generating filelist from git
warning: no previously-included files found matching '.gitreview'
warning: no previously-included files matching '*.pyc' found anywhere in distribution
writing manifest file 'webdemo.egg-info/SOURCES.txt'
warning: sdist: standard file not found: should have one of README, README.rst, README.txt

running check
warning: check: missing required meta-data: url

creating webdemo-0.0.1
creating webdemo-0.0.1/webdemo
creating webdemo-0.0.1/webdemo.egg-info
making hard links in webdemo-0.0.1...
hard linking AUTHORS -> webdemo-0.0.1
hard linking ChangeLog -> webdemo-0.0.1
hard linking LICENSE -> webdemo-0.0.1
hard linking README.md -> webdemo-0.0.1
hard linking requirement.txt -> webdemo-0.0.1
hard linking setup.cfg -> webdemo-0.0.1
hard linking setup.py -> webdemo-0.0.1
hard linking webdemo/__init__.py -> webdemo-0.0.1/webdemo
hard linking webdemo.egg-info/PKG-INFO -> webdemo-0.0.1/webdemo.egg-info
hard linking webdemo.egg-info/SOURCES.txt -> webdemo-0.0.1/webdemo.egg-info
hard linking webdemo.egg-info/dependency_links.txt -> webdemo-0.0.1/webdemo.egg-info
hard linking webdemo.egg-info/entry_points.txt -> webdemo-0.0.1/webdemo.egg-info
hard linking webdemo.egg-info/not-zip-safe -> webdemo-0.0.1/webdemo.egg-info
hard linking webdemo.egg-info/pbr.json -> webdemo-0.0.1/webdemo.egg-info
hard linking webdemo.egg-info/top_level.txt -> webdemo-0.0.1/webdemo.egg-info
copying setup.cfg -> webdemo-0.0.1
Writing webdemo-0.0.1/setup.cfg
Creating tar archive
removing 'webdemo-0.0.1' (and everything under it)~/programming/python/webdemo git:(master) ✗ $ ls dist
webdemo-0.0.1.tar.gz
➜ ~/programming/python/webdemo git:(master) ✗ $ ls
AUTHORS  ChangeLog  dist  LICENSE  README.md  requirement.txt  setup.cfg  setup.py  webdemo  webdemo.egg-info

验证成功,在dist/目录下生成了一个0.0.1版本的源码归档,同时生成了如下的文件和目录:AUTHORS, ChangeLog, webdemo.egg-info

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python的distutils、setuptools模块
python包在开发中十分常见,一般的使用套路是所有的功能做一个python模块包,打包模块,然后发布,安装使用。打包和安装包就是最常见的工作。学习中遇到distutils和setuptools两种打包的工具。
狼啸风云
2023/10/07
9690
python的distutils、setuptools模块
Python打包-setuptools
Python打包分发工具setuptools:曾经 Python 的分发工具是 distutils,但它无法定义包之间的依赖关系。setuptools 则是它的增强版,能帮助我们更好的创建和分发 Python 包,尤其是具有复杂依赖关系的包。其通过添加一个基本的依赖系统以及许多相关功能,弥补了该缺陷。他还提供了自动包查询程序,用来自动获取包之间的依赖关系,并完成这些包的安装,大大降低了安装各种包的难度,使之更加方便,将程序打包以后可以可以安装到自己的虚拟环境中,也可以上传到PyPI,这样非常方便大项目开发
七秒246
2021/12/16
1.2K0
【Python基础】08、Python模
 可以将代码量较大的程序分割成多个有组织的、彼此独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块
py3study
2020/01/06
1.8K0
如何打包你的 Python 代码
创建一个简单的 Python 库,调用myhellolib 一些需要打包的示例代码。该库接受一个字符串,然后以大写字母打印该字符串。 两行代码,但是项目结构很重要,所以先创建目录树:
KINGLIFE
2021/11/11
9590
python的setup.py文件及其常用命令
编写setup.py文件,获取帮助:python setup.py --help-commands
狼啸风云
2019/11/27
1.6K0
Python打包系统简单入门
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/u011054333/article/details/82940813
乐百川
2019/07/02
9960
Python打包系统简单入门
怎样才算学会PythonPython 实践基础
假如你已经有了编程基础,那么学习一门新语言的困难点绝对不在语法、语义和风格等代码层面上的,而在于语言范式(OO,FP还是Logic),语言的生态(如:依赖管理和包发布等)和工具(编辑器,编译器或者解释器)这些方面,请参看如何高效地学习编程语言。再假如你已经对各类语言范式都有一定的了解,那么最后的困难之处就是...细节,它是魔鬼。
lambeta
2018/08/17
9840
怎样才算学会PythonPython 实践基础
Setuptools 【Python工具包详解】
setuptools是Python distutils增强版的集合,它可以帮助我们更简单的创建和分发Python包,尤其是拥有依赖关系的。用户在使用setuptools创建的包时,并不需要已安装setuptools,只要一个启动模块即可。
IT茂茂
2020/11/04
1.1K0
Python3基础之构建setup.py
在一个名为test_setup的路径下,作为我们最上层的项目根目录。然后在根目录下有需求配置文件requirements.txt,我们可以在这个文件中添加我们的python库所依赖的其他python库,如numpy、scipy等。而setup.py就是我们这里的安装文件,在后面的章节中会着重提到。最后是我们的项目的核心路径ts,里面包含了我们的核心代码。
不知名站长
2021/04/01
4510
Python3基础之构建setup.py
Python包管理工具setuptools
setuptools是Python distutils增强版的集合,它可以帮助我们更简单的创建和分发Python包,尤其是拥有依赖关系的。用户在使用setuptools创建的包时,并不需要已安装setuptools,只要一个启动模块即可。
周小董
2019/03/25
1.7K0
Python版本的选择和项目目录规范
Python同时支持多个版本,这已不是什么秘密。解释器的每个次要版本都获得18个月的错误修复支持和5年的安全支持。例如,2018年6月27日发布的Python 3.7将在2019年10月(15个月后)发布Python 3.8之前得到支持。在2019年12月左右,将发生Python 3.7的最后一个错误修复版本,并且每个人都应该切换到Python 3.8。
后场技术
2020/09/03
1.2K0
Python版本的选择和项目目录规范
如何创建私有Python包存储库
Python包的基本脚手架是一个包含与用户交互的代码的__init__.py文件。
良莉
2018/09/03
4.5K0
如何创建私有Python包存储库
从开发属于你自己的第一个 Python 库,做一名真正的程序员「双语版」
你好,我是悦创。之前我在 CSDN 编写了一篇开发 Python 库的教程,有人加我提问到的一些问题,我来更新一下这篇文章:https://blog.csdn.net/qq_33254766/article/details/119874997
AI悦创
2022/06/28
5020
从开发属于你自己的第一个 Python 库,做一名真正的程序员「双语版」
Python之包管理工具快速入门
学Python最简单的方法是什么?推荐阅读:30万年薪Python开发工程师成长魔法 在Python环境中已经有很多成熟的包,可以通过安装这些包来扩展我们的程序。 例如,很多时候Python开发人员都会去PyPI网站去查找自己想要使用的包,然后进行安装。PyPI ( Python Package Index)是获得第三方 Python 软件包以补充标准库的一个站点。 在安装Python包的过程中,经常涉及到distutils、setuptools、distribute、setup.py、easy_ins
小小科
2018/05/04
8900
Python之包管理工具快速入门
统计学习方法 Python 库
源码地址:https://github.com/iOSDevLog/slmethod
iOSDevLog
2019/06/01
1K0
Python 中的 requirements.txt 与 setup.py
新手而言管理 Python 项目中的依赖项是非常具有挑战性的,这个问题是由历史原因引起的并且一直被吐槽。
deephub
2022/04/14
1.2K0
Python 中的 requirements.txt 与 setup.py
Python包管理整理:setuptoo
setuptool管理python相关的包 一、介绍 setuptool管理python相关的包的工具。这些包是zip格式发布,但是后缀一般都是.egg setuptool能解决python包的依赖关系 setuptool安装的包默认安装到/usr/local/lib/pythonX.X/site-packages/目录下 下载包默认到http://pypi.python.org/pypi下载 pypi为Python PackageIndex 二、安装setuptool工具 1、rhel/centos #yum -y install python-setuptools 2、freebsd #cd /usr/ports/devel/py-setuptools && make install clean 3、debian/ubuntu #sudo apt-get install python-setuptools 以上使用系统包管理系统安装后需要更新一下: # easy_install -U setuptools 4、通用方式 Download ez_setup.py , and then run: ez_setup.py -Zf http://peak.telecommunity.com/snapshots/ RuleDispatch #fetch http://peak.telecommunity.com/dist/ez_setup.py #python2.7 ez_setup.py python2.7指定版本号,以表示setuptool使用的python版本。未指定版本则使用默认,也表示默认安装的版本是最新版本。 这一约定方便,旧版本也可以继续使用 三、通过easy_install安装python包 (一)普通安装 #easy_install Babel (二)安装本地或网络文件系统中安装egg文件 #easy_install /net/src/eggs/py2.5.egg (三)指定包的下载路径安装 #easy_install http://trac-hacks.org/svn/iniadminplugin/0.11/ #easy_install http://trac-hacks.org/svn/accountmanagerplugin/trunk (四)从URL源码包安装 #easy_install  http://pypi.python.org/simple/asp/asp-0.1.2.4.tar.gz 条件asp-0.1.2.4.tar.gz包中的根目录中必须包括setup.py文件 (五)web上面搜索包,并自动安装 # easy_install -f http://pypi.python.org/simple/ asp (六)指定包的版本 # easy_install asp==0.1.2.1 如果指定的版本高于现有已安装的保本就是升级了 (七)升级包 升级到最新版本(不指定版本就会升级到最新版本 # easy_install -U asp 升级到指定版本 # easy_install -U asp==0.1.2.2 四、认证和配置文件 1、有些需要认证的python站点 easy_install -f http://uid@password@pypi.python.org/simple/packages 2、使用配置文件定义下载的站点和安装的目录 配置文件位置 当前目录/setup.cfg 或当前目录/.pydistutils.cfg 配置文件内容 find-links=http://pypi.python.org/simple/ #特定搜索包的URL allow=*.python.org #搜索的域名 install_dir=/src/lib/python    #这个目录需要在PYTHONPATH中 (sys.path) 更多帮助请看easy_install --help
py3study
2020/01/07
6770
python setuptools安装与
Python本身自带了一套工具distutils ,用于发布 Python 应用程序。但 distutils 没有提供定义其它依赖包的功能,setuptools 的真正优点并不在于实现distutils 所能实现的功能——尽管它的确增强了distutils的功能并简化了setup.py 脚本中的内容。setuptools 最大的优势是它在包管理能力方面的增强。它可以使用一种更加透明的方法来查找、下载并安装依赖包;并可以在一个包的多个版本中自由进行切换,这些版本都安装在同一个系统上;也可以声明对某个包的特定版本的需求;还可以只使用一个简单的命令就能更新到某个包的最新版本。 简单来说,Python setuptools可以看做是增强版的distutils,用来管理Python的各种包。
py3study
2020/01/10
2.7K0
打包一个Python库(PyPa)
缘起~为什么会有这样的一篇文章呢?因为我最近在读Python的官方文档,里面正好读到了这里安装Python模块,然后我天天也在读源码,也在实践中得到了一些佐证。所以记录一下。
云深无际
2021/12/01
9940
打包一个Python库(PyPa)
如何制作whl文件「建议收藏」
wheel文件 Wheel和Egg都是python的打包格式,目的是支持不需要编译或制作的安装过程,实际上也是一种压缩文件,将.whl的后缀改为.zip即可可看到压缩包里面的内容。按照官网说法,wheels是发行版Python的新标准并且要取代.egg。 Egg格式是由setuptools在2004年引入,而Wheel格式是由PEP427在2012年定义。 Wheel现在被认为是Python的二进制包的标准格式。
全栈程序员站长
2022/08/23
3K0
相关推荐
python的distutils、setuptools模块
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文