本地打包,setup安裝
一、distutils
使用:distutils 進行打包,步驟如下,以單一文件為例。
1、創建文件
在同一目錄下。寫一個foo.py文件:
#-*- coding:utf-8 -*-
def sum(*values):
s = 0
for v in values:
i = int(v)
s = s + i
print s
def output():
print 'print something'
寫一個setup.py文件:
#-*- coding:utf-8 -*-
from distutils.core import setup
setup(name='foo',
version='1.0',
py_modules=['foo'],
)
2、創建源碼包
運行python setup.py sdist可以為模塊創建一個源碼包,在當前目錄下,創建dist目錄。
dist里面有個文件名為foo-1.0.tar.gz,這個就是可以分發的包。使用者拿到這個包后,解壓。
3、安裝腳本
可以在源碼包foo-1.0目錄下執行:python setup.py install --record log。
也可以直接在最開始的setup.py處,執行:python setup.py install --record log。
foo.py就會被拷貝到python類路徑下,可以被導入使用。
使用--record log:會把安裝的信息記錄在log下,然后在要卸載的時候,使用cat log | xargs rm -rf 就可以卸載。
二、setuptools
以模塊(一個文件夾下多個py文件)為例。
1、創建文件
創建文件目錄:
/example_pkg
/example_pkg
__init__.py
setup.py
LICENSE
README.md
setup.py文件:
# -*- coding:utf-8 -*-
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="foo",
version="0.0.1",
author="Example Author",
author_email="author@example.com",
description="A small example package",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/pypa/sampleproject",
packages=setuptools.find_packages(), # 指定需要安裝的模塊
# packages=find_packages(exclude=['contrib', 'docs', 'tests*']),
# py_modules=["six"], # 剔除不屬於包的單文件Python模塊
# install_requires=['peppercorn'], # 指定項目最低限度需要運行的依賴項
# python_requires='>=2.6, !=3.0.*, !=3.1.*, !=3.2.*, <4', # python的依賴關系
# package_data={
# 'sample': ['package_data.dat'],
# }, # 包數據,通常是與軟件包實現密切相關的數據
classifiers=[
# How mature is this project? Common values are
# 3 - Alpha
# 4 - Beta
# 5 - Production/Stable
'Development Status :: 3 - Alpha',
# Indicate who your project is intended for
'Intended Audience :: Developers',
'Topic :: Software Development :: Build Tools',
# Pick your license as you wish (should match "license" above)
'License :: OSI Approved :: MIT License',
# Specify the Python versions you support here. In particular, ensure
# that you indicate whether you support Python 2, Python 3 or both.
'Programming Language :: Python :: 2',
# 'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
# 'Programming Language :: Python :: 3',
# 'Programming Language :: Python :: 3.2',
# 'Programming Language :: Python :: 3.3',
# 'Programming Language :: Python :: 3.4',
"Operating System :: OS Independent",
],
)
name:包的名字
version:版本號
author,author_email:作者信息
description:是一個簡短的,一句話的包的總結
long_description:是包的詳細說明。這顯示在Python Package Index的包詳細信息包中。在這種情況下,加載長描述README.md是一種常見模式
long_description_content_type:索引什么類型的標記用於長描述。在這種情況下,它是Markdown
url:項目主頁的URL
packages:自動發現所有包和子包,而不是手動列出每個包。在這種情況下,包列表將是example_pkg,因為它是唯一存在的包。
創建README.md:
# Example Package This is a simple example package. You can use [Github-flavored Markdown](https://guides.github.com/features/mastering-markdown/) to write your content.
創建LICENSE:
上傳到Python Package Index的每個包都包含許可證,這一點很重要。這告訴用戶安裝您的軟件包可以使用您的軟件包的條款。有關選擇許可證的幫助,請參閱 https://choosealicense.com/。選擇許可證后,打開 LICENSE並輸入許可證文本。例如,如果您選擇了MIT許可證:
Copyright (c) 2018 The Python Packaging Authority Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2、安裝腳本
安裝:python setup.py install --record log。
卸載:cat log | xargs rm -rf
簡單例子:
https://github.com/longgb246/lgblearn/blob/master/setup.py
相關參考:
https://packaging.python.org/tutorials/packaging-projects/
https://packaging.python.org/guides/distributing-packages-using-setuptools/
