Python包管理工具setuptools使用

Admin 2018-09-17 14:50:54 Python

什么事setuptools

setuptools是Python distutils增强版的集合,它可以帮助我们更简单的创建和分发Python包,尤其是拥有依赖关系的。setuptools可以说相当的简单易用,它会随着Python一起安装,你只需要写一个简短的setup.py文件就可以将你的Python应用打包。

功能亮点

  • 利用EasyInstall自动查找、下载、安装、升级依赖包

  • 创建Python Eggs

  • 包含包内的数据文件

  • 支持上传到PyPi

  • 可以部署开发模式,使用项目在sys.path中

setuptools要比distutils好用的多,也能满足大型项目的安装和发布

安装

下载地址:https://github.com/pypa/setuptools

使用

创建一个目录和setup.py文件

mkdir demo
cd demo

vim setup.py
#coding:utf8
from setuptools import setup 

setup(    
  name='MyApp',         # 应用名    
  version='1.0',        # 版本号    
  packages=['myapp']    # 包括在安装包内的Python包
)

有了setup.py就可以打各种包,也可以部署到本地环境中

创建egg包

python setup.py bdist_egg

该命令会在当前目录下创建“dist”及“build”目录及egg-info文件

创建tar.gz包

python setup.py sdist --formats=gztar

该命令在“dist”目录创建tar包

安装应用

python setup.py install

会安装到Python环境的“site-packages”目录下

开发方式安装

python setup.py develop

如果应用在开发过程中会频繁变更,每次安装还需要先卸载原来的版本,很麻烦,使用develop开发方式安装的话,应用代码不会真的被拷贝到本地site-packages目录下,而是在site-packages目录下创建一个指向当前应用位置的链接,这样当前位置源码改动就会马上生效。

引入非Python文件

如何打包静态文件如:css、js、图片等,这时我们要在项目下添加MANIFEST.in的文件。如下:

demo/
  ├ setup.py         # 安装文件
  ├ MANIFEST.in      # 清单文件
  └ myapp/           # 源代码
      ├ static/      # 静态文件目录    
      ├ __init__.py    
      ...

我们在清单文件“MANIFEST.in”中,列出想要在包内引入的目录路径

recursive-include myapp/static *
recursive-include myapp/xxx *

然后在setup.py中将"include_package_data"参数设置为True

from setuptools import setup
 
setup(
    name='demo',         # 应用名
    version='1.0',        # 版本号
    packages=['myapp'],   # 包括在安装包内的Python包
    include_package_data=True    # 启用清单文件MANIFEST.in
)

自动安装依赖

from setuptools import setup
 
setup(
    name='demo',         # 应用名
    version='1.0',        # 版本号
    packages=find_packages(),# 包括在安装包内的Python包
   #packages=['myapp'],   # 包括在安装包内的Python包
    include_package_data=True,    # 启用清单文件MANIFEST.in
    exclude_package_date={'':['.gitignore']},
    install_requires=[    # 依赖列表
        'Flask>=0.10',
        'Flask-SQLAlchemy>=1.5,<=2.1'
    ],
    dependency_links=[    # 依赖包下载路径
        'http://example.com/dependency.tar.gz'
    ]
)

补充

官方文档:https://setuptools.readthedocs.io/en/latest/

相关文章
最新推荐