setup.py應用場合
網上見到其他人這樣介紹:
假如我在本機開發一個程序,需要用到python的redis、mysql模塊以及自己編寫的redis_run.py模塊。我怎么實現在服務器上去發布該系統,如何實現依賴模塊和自己編寫的模塊redis_run.py一起打包,實現一鍵安裝呢?同時將自己編寫的redis_run.py模塊以exe文件格式安裝到python的全局執行路徑C:\Python27\Scripts下呢?在這種應用場景下,pip工具似乎派不上了用場,只能使用python的構建工具setup.py了,使用此構建工具可以實現上述應用場景需求,只需在 setup.py 文件中寫明依賴的庫和版本,然后到目標機器上使用python setup.py install安裝。
可以看到其目的就是方便我們安裝代碼:可以一體化的安裝依賴包,並記錄生成包相關信息,方便大規模部署,故對於開發者而言,編寫python的第三方庫,最重要的事情之一就是編寫setup.py了。
使用setup例子
我們建立一個名為demo的空白文件夾,在里面創建setup.py文件,錄入如下代碼:
from setuptools import setup, find_packages setup( name = "demo", version = "0.1", packages = find_packages(), )
運行命令:
python setup.py bdist_egg
此時查看目錄樹:
│ setup.py
│
├─build
│ └─bdist.win-amd64
├─demo.egg-info
│ dependency_links.txt
│ PKG-INFO
│ SOURCES.txt
│ top_level.txt
│
└─dist
demo-0.1-py3.6.egg
其中dist目錄下即為打包好的egg文件,可以將尾綴改為zip並解壓,內部是一系列自動生成的文件,可以自行查閱功能,
│ demo-0.1-py3.6.zip
│
└─EGG-INFO
dependency_links.txt
PKG-INFO
SOURCES.txt
top_level.txt
zip-safe
如果我們的生成命令使用的是:
python setup.py sdist
生成的將會是tar.gz文件,解壓后直接包含setup.py文件,我們使用python setup.py install運行該文件可以直接將包拷貝到python工作目錄下,方便直接調用。
在項目Mask_RCNN中,我們最終可以在anaconda目錄中找到如下文件,
其對應的安裝選項如下,可以一窺setup的效用,
setup( name='mask-rcnn', version='2.1', url='https://github.com/matterport/Mask_RCNN', author='Matterport', author_email='waleed.abdulla@gmail.com', license='MIT', description='Mask R-CNN for object detection and instance segmentation', packages=["mrcnn"], # setup.py同級目錄下文件夾mrcnn中含有__init__.py文件 install_requires=install_reqs, include_package_data=True, python_requires='>=3.4', long_description="""This is an implementation of Mask R-CNN on Python 3, Keras, and TensorFlow. The model generates bounding boxes and segmentation masks for each instance of an object in the image. It's based on Feature Pyramid Network (FPN) and a ResNet101 backbone.""", classifiers=[ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "Intended Audience :: Education", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Scientific/Engineering :: Image Recognition", "Topic :: Scientific/Engineering :: Visualization", "Topic :: Scientific/Engineering :: Image Segmentation", 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', ], keywords=["image instance segmentation object detection mask rcnn r-cnn tensorflow keras", ] )
其他資料