2016年5月14日 星期六

python 設定 setup.py 及 MANIFEST.in 封裝整個專案 並上傳至 pypi 的設定

setup.py

from setuptools import setup,find_packages

with open("README.txt") as file:
    long_description = file.read()

setup(
    name = "bennu",
    version = "0.3.2.dev2",
    keywords = ["bennu", "utility", "muchu"],
    description = "muchu's utility module",
    author = "MuChu Hsu",
    author_email = "muchu1983@gmail.com",
    license = "BSD 3-Clause License",
    url="https://github.com/muchu1983/bennu",
    long_description=long_description,
    packages = find_packages(),
    include_package_data = True,
    install_requires = ["Pillow>=3.0.0"],
    platforms = "python 3.3",
    entry_points = {"console_scripts":["bennu=bennu.launcher:entry_point"]},
    classifiers = [
        "Programming Language :: Python :: 3.3",
        ],
)

重點:
name 之後使用 pip install 要用到的名稱
version 每次上傳不得重覆,否則上傳會失敗,數字越大版本越新。
find_packages() 可以自動找出含有 __init__.py 的資料夾,省去一一指定。
install_requires 指定本專案相依的其他 pypi 專案,用 pip 安裝時也會被加入安裝。
entry_points 指定 專案的執行進入點 並建立 可執行檔 ["execuatable_name=package.package:function"]

MANIFEST.in

include LICENSE
recursive-include bennu_res *
recursive-exclude test *

搭配 MANIFEST.in 可以指定其他檔案是否要一起加入封裝

上傳

1. 登入,首次會問你 pypi 上的帳密,之後可以記錄
python setup.py register 
2. 包裝,將你的專案包裝成 zip (windows) 或 tar.gz (linux)
python setup.py sdist
3. 上傳至 pypi
python setup.py upload

成功的話,要先移除專案資料夾內生成的 dist/ 還有 .egg-info/
否則 pip 會以為你已經有最新版本了,若是其他電腦就沒差
之後就可以用
pip install name
來安裝專案
安裝後也可以直接執行 executable_name 來執行

沒有留言: