setup.py(Legacy version)

说明

setup脚本是使用Distutils来构建、分发、安装模块。其主要目的是向Distutils描述模块分发包。

使用方法

1.创建目录结构

demo
    |--setup.py
    |--README.md
    |--bin
    |   |--test
    |--lib
    |   |--pkg1
    |   |   |--__init__.py
    |   |   |--data
    |   |   |   |--data1.dat
    |   |   |   |--data2.dat
    |--files
    |   |--fileA.txt

说明:

  • 目录下须有setup.py文件
  • 包内须有_init_文件。如本示例包为pkg1

2.编写setup.py

from distutils.core import setup  

setup(
        name='demo',    # 模块名字
        version='1.0',  #版本
        description='this is a test of the disutils',   #描述
        author='yafei', # 作者
        author_email='[email protected]',    #作者邮箱
        url='https://www.demo.com', #包的主页
        packages=['pkg1'],  # 包
        package_data={'pkg1':['data/*.dat']},    # 包数据文件,与包的执行相关
        package_dir={'':'lib'}, # 表示包都在lib文件夹下
        data_files=[('/usr/share/'),],
        # scripts=['bin/test.py']
)

说明:

  • __init__.py:如果告诉distutils包需要默认在对应的包下存在__init__.py文件。如packages = ['foo'],则distutils需可以找到foo/__init__.py
  • name: 模块名字。

    模块(module): Python中可复用的基本代码单元,可由其他代码import的一块代码,这里我们只关注三种类型的模块:纯python模块,扩展模块和包。

    纯python模块(pure Python module): 由python编写的模块,包含在单独的py文件中(或者是pyc/pyo文件)。

    扩展模块(extension module):由实现Python的底层语言编写的模块(C/C++ for Python, Java for Jython)。通常包含在单独的动态加载文件中,比如Unix中的so文件,windows中的DLL文件,或者是Jython扩展的java类文件。(注意,目前为止Distutils只能处理Python的C/C++扩展)

    (package):包是含其他模块的模块,经常由包含_init_.py文件的目录发布。

    Root包(root package): 包层次关系中的根(它不是真正的包,因为它不包含_init_.py文件)

    引用这里

  • package_dir={'key': 'value'}: key为包名,若为空,则表示全部包。value为包存在的相对分发的相对路径

  • scripts: 之前产生的纯的或非纯的模块都需要通过import来被使用,但是通过scripts可以是模块通过脚本运行。

scripts是一些包含Python源代码的文件。

3.配置文件

一般创建发布不可能写下所有的内容,有可能需要从用户或用户系统中获取信息。只要信息比较简单比如如从一列文件夹中搜索c头文件,那么提供配置文件“setup.cfg”给用户是一种比较简单容易的方法。此外,配置文件还提供给任何命令选项一些默认值,可以通过命令行或更改配置文件对之修改。

配置文件是介于setup脚本和命令行之间的一个优先级。从而有一下可行性

  • installers

4.创建源分发包

//TODO:Packaging and Distributing Projects

参考资料


附录

pyc和pyo

  • pyc文件:是Python编译后的字节码(bytecode)文件。只要你运行了py文件,python编译器就会自动生成一个对应的pyc字节码文件。这个pyc字节码文件,经过python解释器,会生成机器码运行(这也是为什么pyc文件可以跨平台部署,类似于Java的跨平台,java中JVM运行的字节码文件)。下次调用直接调用pyc,而不调用py文件。直到你这个py文件有改变。python解释器会检查pyc文件中的生成时间,对比py文件的修改时间,如果py更新,那么就生成新的pyc。
  • pyo文件:是python编译优化后的字节码文件。pyo文件在大小上,一般小于等于pyc文件。如果想得到某个py文件的pyo文件,可以这样: python -O -m py_compile xxxx.py python文档是这样描述的:这个优化没有多大作用,只是移除了断言。

results matching ""

    No results matching ""