761棋牌_761棋牌app下载_761棋牌游戏中心大厅

761棋牌加入了众多的创新玩法,所以说在选择娱乐天体验的时候你一定要相信761棋牌,一定会给大家提供最好的娱乐享受,因为现在的名气很大。

By

编写 setup.py 打包 python 程序且安装到命令行运行

前言

这两天封装了一个异常点检测的工具,并且需要把它部署到一个新环境中。为了方便使用,我想到编写 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 会更适合需求。

参考自:python的构建工具setup.py

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
    https://www.cnblogs.com/maociping/p/6633948.html

  • python的setup问题(比较详细)
    https://blog.csdn.net/langb2014/article/details/53114341

  • 使用 Setup 将Python 代码 打包
    http://www.cnblogs.com/yunfeiqi/p/6844771.html

  • Python 打包,entry_points的使用
    https://blog.csdn.net/llsmingyi/article/details/78691287

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

原创声明

转载请注明:呓语 » 编写 setup.py 打包 python 程序且安装到命令行运行