Python使用setup.py打包成库供别的模块调用

一、setup.py 文件的编写

http://blog.konghy.cn/2018/04/29/setup-dot-py/

二、实操过程

1.创建python项目bricewulib

Python使用setup.py打包成库供别的模块调用_第1张图片
2.新建test_package包并创建info1类以及print_hello方法
Python使用setup.py打包成库供别的模块调用_第2张图片
3.为了让包的结构再复杂点,我们再在test_package下面新建一个test_package2包并创建Info2类以及print_hello2方法(注意:这里是Info2,不是上面的Info1)
Python使用setup.py打包成库供别的模块调用_第3张图片
4.此时整个test_package编写完成,目录结构(test_package包包含test_package2包以及info1类,test_package2包中又包含info2类)
Python使用setup.py打包成库供别的模块调用_第4张图片
5.编写:setup.py,注意:setup.py与test_package包同在bricewulib根目录下,而setup.py中的内容如下图
其中比较重要的几项是:name,version,packages

name:描述的是你打包的文件文件名。
version描述的是文件的版本号。
packages是所有要打包的包(package),这里需要打包的是test_package包以及test_package包下的test_package2。所以packages=[‘test_package’,‘test_package.test_package2’]。包与包之间用逗号“ ,”隔开

Python使用setup.py打包成库供别的模块调用_第5张图片
6.命令:python setup.py sdist 为模块创建一个源码包(linux下的命令,windows下自寻上网查询或见此博客的参考链接)
Python使用setup.py打包成库供别的模块调用_第6张图片
7.多了一个MANIFEST文件以及文件夹dist,而我们的源码包就在dist文件夹下面
Python使用setup.py打包成库供别的模块调用_第7张图片
8.我们将其解压得到文件夹bricewulib-1.0,并进入文件夹bricewulib-1.0
Python使用setup.py打包成库供别的模块调用_第8张图片
9.到bricewulib-1.0目录下执行:sudo python setup.py install进行库的安装
Python使用setup.py打包成库供别的模块调用_第9张图片
10.此时,我们的/usr/local/lib/python2.7/dist-packages/目录下会多出一个文件bricewulib-1.0.egg-info和文件夹test_package,如图(从上面的安装信息也可以看出):
Python使用setup.py打包成库供别的模块调用_第10张图片
11.进入文件夹test_package可以看到,这里的文件即是我们的源码:
在这里插入图片描述
12.至此打包完成。
13.新建mytest项目来调用test_package包,依次通过 Info1.print_hello(),Info2.print_hello2()方法分别调用
Python使用setup.py打包成库供别的模块调用_第11张图片

二、部分疑问:

1、在setup.py文件中要对所用的包挨个写上么?
答:(1)在工程中包比较少的情况下可以对每个包,挨个写上,如果多的话,则使用find_package()例如:

setup(
    name='mmdet',
    version=get_version(),
    description='Open MMLab Detection Toolbox',
    long_description=readme(),
    keywords='computer vision, object detection',
    url='https://github.com/open-mmlab/mmdetection',
    packages=find_packages(exclude=('configs', 'tools', 'demo')),
    package_data={'mmdet.ops': ['*/*.so']},
    classifiers=[
        'Development Status :: 4 - Beta',
        'License :: OSI Approved :: Apache Software License',
        'Operating System :: OS Independent',
        'Programming Language :: Python :: 2',
        'Programming Language :: Python :: 2.7',
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.4',
        'Programming Language :: Python :: 3.5',
        'Programming Language :: Python :: 3.6',
    ],
    license='GPLv3',
    setup_requires=['pytest-runner'],
    tests_require=['pytest'],
    install_requires=[
        'mmcv', 'numpy', 'matplotlib', 'six', 'terminaltables',
        'pycocotools'
    ],
    zip_safe=False)

其中packages=find_packages(exclude=('configs', 'tools', 'demo')), 的excluce表示,除了这几个文件之外,其他的与setup.py文件相同目录下的文件夹中包含__init__.py文件的均为包,自动打包,不必挨个写上。
(2)、不论是上述例程中的包内之间的嵌套还是在同一级的关系上,必须均在package中写上,否则不能进行打包!

你可能感兴趣的:(Python使用setup.py打包成库供别的模块调用)