一、setup.py 文件的编写
http://blog.konghy.cn/2018/04/29/setup-dot-py/
二、实操过程
1.创建python项目bricewulib
2.新建test_package包并创建info1类以及print_hello方法
3.为了让包的结构再复杂点,我们再在test_package下面新建一个test_package2包并创建Info2类以及print_hello2方法(注意:这里是Info2,不是上面的Info1)
4.此时整个test_package编写完成,目录结构(test_package包包含test_package2包以及info1类,test_package2包中又包含info2类)
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’]。包与包之间用逗号“ ,”隔开
6.命令:python setup.py sdist
为模块创建一个源码包(linux下的命令,windows下自寻上网查询或见此博客的参考链接)
7.多了一个MANIFEST文件以及文件夹dist,而我们的源码包就在dist文件夹下面
8.我们将其解压得到文件夹bricewulib-1.0,并进入文件夹bricewulib-1.0
9.到bricewulib-1.0目录下执行:sudo python setup.py install进行库的安装
10.此时,我们的/usr/local/lib/python2.7/dist-packages/目录下会多出一个文件bricewulib-1.0.egg-info和文件夹test_package,如图(从上面的安装信息也可以看出):
11.进入文件夹test_package可以看到,这里的文件即是我们的源码:
12.至此打包完成。
13.新建mytest项目来调用test_package包,依次通过 Info1.print_hello(),Info2.print_hello2()方法分别调用
二、部分疑问:
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
中写上,否则不能进行打包!