- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章浅析python打包工具distutils、setuptools由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
python中安装包的方式有很多种:
python包在开发中十分常见,一般的使用套路是所有的功能做一个python模块包,打包模块,然后发布,安装使用。打包和安装包就是最常见的工作。学习中遇到distutils和setuptools两种打包的工具,学习之后做笔记记录.
distutils 。
distutils 是 python 标准库的一部分,这个库的目的是为开发者提供一种方便的打包方式, 同时为使用者提供方便的安装方式。当我们开发了自己的模块之后,使用distutils的setup.py打包.
。
hello.py 。
1
2
|
def
hello_fun():
print
"i say hello to you"
|
。
setup.py 。
1
2
3
4
5
6
7
8
|
from
distutils.core
import
setup
setup(
name
=
"hello_module"
,
version
=
"1.0"
,
author
=
"ljk"
,
author_email
=
"wilber@sh.com"
,
py_modules
=
[
'hello'
],
)
|
。
再次查看当前目录下自动生成了一个文件夹dist,文件夹中有一个压缩包即为我们的目标文件。另外有一个记录文件manifest.
。
hello_module-1.0.tar.gz 是生成的python模块。切换到的我的python虚拟环境中,安装该模块.
使用python setup.py install 安装该模块。从路径可以看出,该模块安装到标准库的制定路径下.
。
安装好模块之后,在python的交互环境中导入模块。模块就是hello.py文件,引用hello.py文件中的hello_fun()函数.
setuptools 。
setuptools是distutils的增强版。setuptools有一个entry_points功能很方便,类似linux启动某个服务,如在linux命令行里firefox能启动火狐浏览器.
首先检验没有安装之前,命令path没有作用.
1、创建功能包 。
创建一个文件夹demo,在文件夹里创建get_path.py和__init__.py两个文件。get_path.py是功能函数,__init__.py是包的标识文件.
get_path.py 。
1
2
3
4
|
import
os
def
fun():
print
"i am in the path:"
print
os.getcwd()
|
2、配置setup.py文件 。
创建setup.py文件,填写必要的打包信息.
setup.py 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#-*- encoding: utf-8 -*-
from
setuptools
import
setup
setup(
name
=
"demo"
,
# 包名
version
=
"0.1"
,
# 版本信息
packages
=
[
'demo'
],
# 要打包的项目文件夹
include_package_data
=
true,
# 自动打包文件夹内所有数据
zip_safe
=
true,
# 设定项目包为安全,不用每次都检测其安全性
install_requires
=
[
# 安装依赖的其他包(测试数据)
'docutils>=0.3'
,
'requests'
,
],
# 设置程序的入口为path
# 安装后,命令行执行path相当于调用get_path.py中的fun方法
entry_points
=
{
'console_scripts'
:[
'path = demo.get_path:fun'
]
},
)
<br data
-
filtered
=
"filtered"
><br data
-
filtered
=
"filtered"
>
|
在配置中将该模块需要的依赖全部都写好,安装时指定地址去下载。这种方式简化了使用时的安装过程,但是还不够好。最好的方式是pip的自动下载.
3、打包 。
打包之后多出两个文件夹,分别是demo.egg-info和dist。demo.egg-info是必要的安装信息,而dist中的压缩包就是安装包.
查看dist/demo-0.1.tar.gz解压之后的文件.
4、安装包 。
5、使用包 。
安装之后在命令行中直接输入path,回车能够看到调用了get_path.py中的函数fun(),输出字符串.
同时也可以导入使用.
setuptools的进阶使用 。
上面使用setuptools时只是简单的用一个配置文件setup.py就完成了打包信息填写。在真实的开发环境中,往往是多个文件配合。以openstack的打包为例。openstack中引入了pbr的管理工具.
pbr是setuptools的辅助工具,最初为openstack开发,基于d2to1。pbr会读取和过滤setup.cfg中的内容,然后将解析后的数据提供给setup.py作为参数.
setup.cfg提供setup.py的默认参数,同时易于修改。setup.py先解析setup.cfg文件,然后执行相关命令。包括以下功能:
1、从git中获取version,authors和changelog信息 。
2、sphinxautodoc。pbr会扫描project,找到所有模块,生成stubfiles 。
3、requirements。读取requirements.txt文件,生成setup函数需要依赖包 。
4、long_description。从readme.rst、readme.txt或者readmefile中生成long_description参数 。
pbr的文件很简单,如下。配置之后会自动寻找目录下的setup.cfg文件,解析文件参数给setup.py使用.
setup.py 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
from
setuptools
import
setup
setuptools.setup(
setup_requires
=
[
'pbr'
],
pbr
=
true)
setup.cfg
[metadata]
name
=
keystone
version
=
2015.2
summary
=
openstack identity
description
-
file
=
readme.rst
author
=
openstack
author
-
email
=
openstack
-
dev@lists.openstack.org
home
-
page
=
http:
/
/
www.openstack.org
/
classifier
=
environment:: openstack
intendedaudience :: information technology
intendedaudience :: system administrators
license:: osi approved :: apache software license
operatingsystem :: posix :: linux
programminglanguage :: python
programminglanguage :: python ::
2
programminglanguage :: python ::
2.7
[files]
packages
=
keystone
[
global
]
setup
-
hooks
=
pbr.hooks.setup_hook
[egg_info]
tag_build
=
tag_date
=
0
tag_svn_revision
=
0
[build_sphinx]
all_files
=
1
build
-
dir
=
doc
/
build
source
-
dir
=
doc
/
source
[compile_catalog]
directory
=
keystone
/
locale
domain
=
keystone
|
总结 。
以上所述是小编给大家介绍的python打包工具distutils、setuptools ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。
原文链接:https://www.cnblogs.com/goldsunshine/p/8872623.html 。
最后此篇关于浅析python打包工具distutils、setuptools的文章就讲到这里了,如果你想了解更多关于浅析python打包工具distutils、setuptools的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
这似乎是一个常见问题,但没有一个答案似乎有帮助。在 Windows 10 中安装 statsmodels 时弹出错误(已安装 python 3.6.2): python setup.py instal
Python 在可用于打包和描述项目的工具方面有着令人困惑的历史:这些工具包括标准库中的 distutils、distribute、distutils2 和 setuptools(可能还有更多)。 d
D:\anzhuang\anconda\lib\distutils\__init__.py:14: UserWarning: The virtualenv distutils package at %
I was trying to have a virtualenv set up where it is at python 3.8 while my system is at a more r
我正在尝试通过安装 nose 并输入 来测试我的 scipy 安装 import scipy scipy.test('1','10') 我遇到了大约 200 个错误,但最常见的错误之一是: ....
我使用sudo apt-get install python3-pip安装了pip3之后,当我运行以下命令来安装Django sudo pip3 install django时,出现此错误: Trac
为什么这会创建 2 个 tar.gz 文件,‘python setup.py sdist ?我正在尝试使用上传twine upload -r pypitest dist/*.tar.gz我得到错误说
在某些情况下,由于pypi服务器已经上传了保存版本,因此我想使python setup.py upload失败时自动执行上传过程中的错误。 如何强制其从脚本上传(我知道我可以使用网络界面删除旧版本)。
我正在linux中编译一些cython扩展,并注意到从distutils机制进行构建时,它默认使用-O2。我想知道是否有一种简单的方法可以将其更改为-O3。 我尝试在Extension对象上使用ext
我继承了 Fortran 77 代码,该代码实现了多个子例程,这些子例程通过程序 block 运行,每次运行程序时都需要通过交互式命令提示符进行大量用户输入。由于我想自动运行代码,因此我将所有子例程移
我有一个简单的纯 python 项目,我想将其与 distutils 一起使用。我已成功为 python 模块和一些许可证文本文件创建压缩 tar 文件。这些是 setup.py 的相关部分setup
我一直在开发一个包含大量文件的 Python 扩展模块。在一台机器上构建时,python setup.py build 会很高兴地检测更改的文件,仅构建这些文件,并将整个文件链接在一起,就像 make
所以可以使用distutils创建文件,比如 PIL-1.1.6.win32-py2.5.exe 您可以运行并使用它来轻松安装某些东西。但是,安装需要用户输入才能继续(您必须单击“确定”三次)。我想创
我已经用 C 编写了一个 Python 扩展库,目前我正在使用 distutils 来构建它。我还有一个生成 .h 文件的 Python 脚本,我想将其包含在我的扩展中。 是否可以使用 distuti
我找到了Question#1321270用于安装后。我目前的主要目标是 bdist_wininst,但我没有找到任何与卸载相关的内容... 澄清一下: 我想在安装后注册一个com服务器并在卸载前取消注
是否可以让 distutils 只运行 python 模块依赖性分析(并可能安装丢失的模块)而不实际安装有问题的 python 模块?我想象一个命令如下: ./setup.py check-depen
我已阅读文档,但我不明白。 为什么我必须使用 distutils 来安装 python 模块? 为什么我不能将模块保存在 python 路径中? 最佳答案 您不必使用 distutils。您可以手动安
我写了一个 boost-python 扩展,目前正在通过 distutils 构建。 不幸的是,我无法在 distutils 中找到一种方法来构建没有调试符号的扩展,或者在安装时从扩展中删除符号。 注
也许是个愚蠢的问题,但我想知道 Python 的 distutils 从哪里获得编译器选项?它得到了一些链接目录错误,我想一劳永逸地纠正它。 我知道应该有一个 prefix/lib/pythonver
例如,我可以使用 python setup.py build --compiler=msvc 或 python setup.py build --compiler=mingw32 或只是 python
我是一名优秀的程序员,十分优秀!