製作 Packages
基本 setup.py
from setuptools import setup
setup(name='funniest',
version='0.1',
description='The funniest joke in the world',
url='http://github.com/storborg/funniest',
author='Flying Circus',
author_email='flyingcircus@example.com',
license='MIT',
packages=['funniest'],
zip_safe=False)
install_requires & requirements.txt
install_requires 通常是這專案需要的最少相依套件, 裡面寫的是抽象(Abstract)的套件, 只有名稱和版本範圍限制, install_requires 會在使用 pip 安裝時進行處理。
而 requirements.txt 則通常是定義完整的 Python 環境,
也可能包含明確指定的套件版本,
用於重建一樣的安裝環境,
也可能包含特定的 URL 來指定套件來源(Concrete),
requirements.txt 不會自動在使用 pip 安裝時進行處理,
除非使用 pip install -r
特別指定。
在 setup.py 內重複利用 requirements.txt
import os
from pip.req import parse_requirements
ROOT_DIR = os.path.dirname(os.path.realpath(__file__))
# parse_requirements() returns generator of pip.req.InstallRequirement instance
install_requires = parse_requirements(
os.path.join(ROOT_DIR, 'requirements.txt'),
session=False
)
# requirements is a list of requirement
# e.g. ['requests==2.13.0', ...]
requirements = list(map(lambda x: str(x).split()[0], install_requires))
setup(
...
install_requires=requirements,
...
)
額外的 dependencies 來源(setup.py)
setup(
...
dependency_links=['http://github.com/user/repo/tarball/master#egg=package-1.0']
...
)
安裝額外的檔案
...
setup(
...
package_data={'': ['*.txt', 'path/to/resources/*.txt']},
include_package_data=True,
...
)
MANIFEST.in:
include path/to/resources/*