前言

python setup install安装到指定位置 python install setup.py_依赖包

这两天封装了一个异常点检测的工具,并且需要把它部署到一个新环境中。为了方便使用,我想到编写 setup.py 打包/安装我的 python 程序。

简单来说,之前我是这样使用我的 python 程序:

python outliers.py -h

现在我希望能直接在命令行中使用:

outliers -h

这个效果可以在 python setup.py install 安装之后做到。

setup.py 和 pip 安装包的区别

在安装python的相关模块和库时,我们一般使用“pip install 模块名”或者“python setup.py install”,前者是在线安装,会安装该包的相关依赖包;后者是下载源码包然后在本地安装,不会安装该包的相关依赖包。所以在安装普通的python包时,利用pip工具相当简单。但是在一些场景中,使用 python setup.py install 会更适合需求。

setup.py 介绍

setup.py 是一种构建工具,可以帮助你打包/安装 python 程序。

setup.py 参数介绍:

--name 包名称

--version (-V) 包版本

--author 程序的作者

--author_email 程序的作者的邮箱地址

--maintainer 维护者

--maintainer_email 维护者的邮箱地址

--url 程序的官网地址

--license 程序的授权信息

--description 程序的简单描述

--long_description 程序的详细描述

--platforms 程序适用的软件平台列表

--classifiers 程序的所属分类列表

--keywords 程序的关键字列表

--packages 需要处理的包目录(包含__init__.py的文件夹)

--py_modules 需要打包的python文件列表

--download_url 程序的下载地址

--cmdclass

--data_files 打包时需要打包的数据文件,如图片,配置文件等

--scripts 安装时需要执行的脚步列表

--package_dir 告诉setuptools哪些目录下的文件被映射到哪个源码包。一个例子:package_dir = {'': 'lib'},表示“root package”中的模块都在lib 目录中。

--requires 定义依赖哪些模块

--provides定义可以为哪些模块提供依赖

--find_packages() 对于简单工程来说,手动增加packages参数很容易,刚刚我们用到了这个函数,它默认在和setup.py同一目录下搜索各个含有 __init__.py的包。

其实我们可以将包统一放在一个src目录中,另外,这个包内可能还有aaa.txt文件和data数据文件夹。另外,也可以排除一些特定的包

find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests"])
--install_requires = ["requests"] 需要安装的依赖包
--entry_points 动态发现服务和插件,可以指定命令行运行

其中 entry_points 是关键,可以通过设置它来 安装 python 程序到命令行运行。

在项目中编写 setup.py

下面介绍在我的项目中是如何编写 setup.py 的。

我的项目结构很简单,目录如下:

.
├── config.ini
├── data.csv
├── download_pkgs.sh
├── install.sh
├── outliers.py
└── README.md
其中主程序文件只有 outliers.py。
outliers.py 文件内容大致如下:
#coding=utf8
import ...
class Outliers:
...
def main():
...
if __name__ == '__main__':
main()
下面是我编写 setup.py 文件:
#coding=utf8
from setuptools import setup
import outliers
setup(
name = 'outliers',
version = '0.1.0',
keywords = ('outliers', 'detect'),
description = 'A outliers detect tool.',
license = 'MIT licence',
url = 'https://github.com/elliotxx/outliers',
author = 'ElliotXX',
author_email = 'yiyu2017@qq.com',
py_modules = ['outliers'],
platforms = 'any',
install_requires = [
'numpy>=1.14.5',
'six>=1.5',
'python-dateutil>=2',
'pytz>=2011k',
'pandas>=0.22.0',
'SciPy>= 0.13.3',
'scikit-learn>=0.19.2',
],
entry_points = {
'console_scripts' : [
# 这一行是安装到命令行运行的关键
'outliers = outliers:main'
]
}
)

setup.py 编写好之后放到项目目录中,和 outliers.py 同级。

然后运行以下代码安装 outliers.py:

python setup.py build

python setup.py install

安装成功后,便可以在命令行中直接运行程序:

D:\workspace\outliers>outliers

Reading `data.csv`...

[ERROR] File `data.csv` is not provided

[INFO] You can enter `outliers -h` to see help

D:\workspace\outliers>outliers -i input.csv -o output.csv

Reading `input.csv`...

Data preprocessing...

Model training...

Outliers predicting...

Writing `output.csv`...

参考资料

python的构建工具setup.py

python的setup问题(比较详细)

使用 Setup 将Python 代码 打包

Python 打包,entry_points的使用

python setup.py uninstall - stackoverflow

https://stackoverflow.com/questions/1550226/python-setup-py-uninstall