python-setup模塊


本地打包,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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM