zoukankan      html  css  js  c++  java
  • [Python] 项目打包发布

    一.setuptools

    - 官方文档: Building and Distributing Packages with Setuptools
    - 中文文档: Python包管理工具setuptools详解

    1.使用过程

    编辑: 先在项目主目录下编辑setup.py,
    打包: python setup.py sdist 
    安装: sudo python setup.py install  (--record files.txt)
    卸载: sudo cat files.txt | sudo  xargs rm -rf

    2. setuptools工具的setup.py的模板

    from setuptools import setup, find_packages
    setup(
        name="HelloWorld",
        version="0.1",
        packages=find_packages(),
        scripts=['say_hello.py'],
    
        # Project uses reStructuredText, so ensure that the docutils get
        # installed or upgraded on the target machine
        install_requires=['docutils>=0.3'],
    
        package_data={
            # If any package contains *.txt or *.rst files, include them:
            '': ['*.txt', '*.rst'],
            # And include any *.msg files found in the 'hello' package, too:
            'hello': ['*.msg'],
        },
    
        # metadata for upload to PyPI
        author="Me",
        author_email="me@example.com",
        description="This is an Example Package",
        license="PSF",
        keywords="hello world example examples",
        url="http://example.com/HelloWorld/",   # project home page, if any
    
        # could also include long_description, download_url, classifiers, etc.
    )

    声明依赖包的语法:

    This syntax consists of a project’s PyPI name, optionally followed by a comma-separated list of “extras” in square brackets, optionally followed by a comma-separated list of version specifiers.

    A version specifier is one of the operators <, >, <=, >=, == or !=, followed by a version identifier.

    Tokens may be separated by whitespace, but any whitespace or nonstandard characters within a project name or version identifier must be replaced with -.

    其它例子:

    docutils >= 0.3
    
    # comment lines and  continuations are allowed in requirement strings
    BazSpam ==1.1, ==1.2, ==1.3, ==1.4, ==1.5, 
    ==1.6, ==1.7 # and so are line-end comments
    
    PEAK[FastCGI, reST]>=0.5a4
    
    setuptools==0.5a7

    详情可参考官方说明:Declaring Dependencies 

    二.Python项目的打包、发布和部署的常用方法比较

    1. distutils - python自带的基本安装工具, 适用于非常简单的应用场景使用, 不支持依赖包的安装 
      通过distutils来打包,生成安装包,安装python包等工作,需要编写名为setup.py python脚本文件。
    
    2. setuptools - 针对 distutils 做了大量扩展, 尤其是加入了包依赖机制。不支持python3,安装完setuptools后会有easy_install
    
    3. distribute - 类似于setuptools,支持python3,安装完distribute后会有easy_install。
    
    4. easy_install - setuptools 和 distribute 自带的安装脚本, 也就是一旦setuptools或distribute安装完毕, easy_install 也便可用了。
    
    5. pip - 目标是取代easy_install。easy_install 有很多不足: 安装事务是非原子操作, 只支持 svn, 没有提供卸载命令, 安装一系列包时需要写脚本; pip 解决了以上问题, 已俨然成为新的事实标准, virtualenv 与它已经成为一对好搭档;
    
    6. distutils2 - setuptools 和 distribute 的诞生是因为 distutils 的不济, 进而导致目前分化的状况。它将成为 Python 3.3 的标准库 packaging , 并在其它版本中以distutils2 的身份出现; 换句话说, 它和 pip 将联手结束目前混乱的状况。
    
    7. virtualenv - 用来创建隔离的python环境,处理python环境的多版本和模块依赖。

    常识
    1. sudo apt-get install 安装的package存放在 /usr/lib/python2.7/dist-packages目录中
    2. pip 或者 easy_install安装的package存放在/usr/local/lib/python2.7/dist-packages目录中
    3. 手动从源代码安装的package存放在site-packages目录中

    参考:

    python项目打包发布总结

  • 相关阅读:
    并发编程(贰):线程池浅析
    并发编程(壹):创建线程的三种方式及其对比
    Spring Boot使用@Async实现异步调用:自定义线程池
    parallel stream-不能随便使用
    Java 8新特性(四):新的时间和日期API
    Java 8新特性(三):Optional类
    Java 8新特性(二):Stream API
    Java 8新特性(一):Lambda表达式
    ES日期存储
    String,StringBuffer,StringBuillder的底层结构
  • 原文地址:https://www.cnblogs.com/bymo/p/7389805.html
Copyright © 2011-2022 走看看