setuptools
setuptools
$ pip install --upgrade setuptools
基础用例
from setuptools import setup, find_packages
setup(
name = "HelloWorld",
version = "0.1",
packages = find_packages(),
)
上面就是一个最简单的
from setuptools import setup, find_packages
setup(
name = "HelloWorld",
version = "0.1",
packages = find_packages(),
scripts = ['say_hello.py'],
# Project uses reStructuredText, so ensure that the docutils get
# installed or upgraded on the target machine
install_requires = ['docutils>=0.3'],
package_data = {
# If any package contains *.txt or *.rst files, include them:
'': ['*.txt', '*.rst'],
# And include any *.msg files found in the 'hello' package, too:
'hello': ['*.msg'],
},
# metadata for upload to PyPI
author = "Me",
author_email = "me@example.com",
description = "This is an Example Package",
license = "PSF",
keywords = "hello world example examples",
url = "http://example.com/HelloWorld/", # project home page, if any
# could also include long_description, download_url, classifiers, etc.
)
工具函数
find_packages
对于简单的工程,使用
有些工程可能会使用
from setuptools import setup, find_packages
setup(
name = "HelloWorld",
version = "0.1",
package_dir = {'':'lib'},
packages = find_packages('lib'),
)
源码树如下:
lib/
foo.py
heheinit.py
bar/
__init__.py
bar.py
最终生成的文件如下:
/usr/local/lib/python2.7/dist-packages/HelloWorld-0.1-py2.7.egg-info/dependency_links.txt
/usr/local/lib/python2.7/dist-packages/HelloWorld-0.1-py2.7.egg-info/PKG-INFO
/usr/local/lib/python2.7/dist-packages/HelloWorld-0.1-py2.7.egg-info/SOURCES.txt
/usr/local/lib/python2.7/dist-packages/HelloWorld-0.1-py2.7.egg-info/top_level.txt
/usr/local/lib/python2.7/dist-packages/bar/bar.py
/usr/local/lib/python2.7/dist-packages/bar/bar.pyc
/usr/local/lib/python2.7/dist-packages/bar/__init__.py
/usr/local/lib/python2.7/dist-packages/bar/__init__.pyc
如果没有 package_dir = {'':'lib'}
的话,则会报错:
error: package directory 'bar' does not exist
这是因为执行函数
>>> import setuptools
>>> setuptools.find_packages('lib')
['bar']
__init__.py
文件的目录才会被当做包。最后,对得到的结果进行过滤,去掉匹配
lib/
foo.py
__init__.py
bar/
__init__.py
bar.py
则
entry points
一个name = value
形式的字符串,其中的
比如
setup(
...
entry_points = """
[blogtool.parsers]
.rst = some.nested.module:SomeClass.some_classmethod[reST]
""",
extras_require = dict(reST = "Docutils>=0.3.5")
...
)
setup(
...
entry_points = {'blogtool.parsers': '.rst = some_module:SomeClass[reST]'}
extras_require = dict(reST = "Docutils>=0.3.5")
...
)
setup(
...
entry_points = {'blogtool.parsers': ['.rst = some_module:a_func[reST]']}
extras_require = dict(reST = "Docutils>=0.3.5")
...
)