参考:/p/9a5e7c935273
from setuptools import setup, find_packages
# 最主要的方法就是这个⬇️,给它加上不同的参数
setup(**setup_args)
# argument example:
setup(
name='greeting_pkg', # 在 pip 中注册的名字(如果我们将这个 package 分享到 PyPI,必须保证这个名字与 PyPI 中已有 package 注册的名字不重复)
packages=find_packages() # 也是setuptools里的方法,作用先不管
version='0.1.0' # 不写的话pip list出来会显示默认的0.0.0
install_requires=[ # 这个package需要依赖的其他package,写在这里会自动安装
'PyYAML',
'pandas==0.23.3', # 指定依赖版本的写法
'numpy>=1.14.5',
],
extras_require={ # 可选的依赖,可以通过"pip install -e .[interactive]"来安装
'interactive': ['matplotlib>=2.2.0,<3.0.0', 'jupyter']
}
)
在命令行中执行 module 中的函数
如果我们希望 module 中的函数不仅仅只是被其他 python 程序通过 import 调用,还可以直接在命令行中执行,那么可以做如下修改:(设置参数entry_points里的’console_scripts’)
# greeting_module.py
import pyjokes
def greeting_func(name):
print("Hello,", name)
print("Here is a joke for you:\n", pyjokes.get_joke())
def main():
import sys
arg = sys.argv[1]
greeting_func(arg)
#
from setuptools import setup, find_packages
setup(
# ...,
entry_points={ # 设置了在命令行中如何使用greeting_module中的main函数
'console_scripts': [
'greeting=greeting_pkg.greeting_module:main' # <command>=<package>.<module>:<function>
]
}
)
执行:
$ greeting "De Gang"
Hello, De Gang
Here is a joke for you:
3 Database Admins walked into a NoSQL bar. A little while later they walked out because they couldn’t find a table.
package_data
这个参数是用来include一些非.py文件
- 例子:
Suppose we have a in our project, which we place in exampleproject/data/.
If we want to include this in our package, we must use the package_data argument of setup:
setup(
# ...,
package_data={
'exampleproject': [ # 这个是sub-package的名字
'data/'
]
}
)
这个里面也是用来include一些non-python文件。
用法:
上例中的exampleproject/data/,如果要通过来打包进去:
include exampleproject/data/schema.json
它的效果可以和package_data一样,但是这两者在逻辑上是用来include不同作用的文件。
我的理解:manifest包含一些、这些“项目结构”用的文件,package_data包含的是代码里实际用到的文件,如数据、文本等。
(下面的解释是抄来的)
MANIFEST 控制 sdist 包含的内容, package_data控制bdist包含的内容。
用来给源文件打包, 里面包含许多额外的信息, 比如测试文件之类的。
package_data用于指定安装时加入的额外的文件, 不需要再中重复定义, 源文件打包的时候回自动包含这里面的文件。
以下都是描述性参数:
from setuptools import setup, find_packages
setup(
...
# metadata to display on PyPI
author="Me",
author_email="me@",
description="This is an Example Package",
keywords="hello world example examples",
url="/HelloWorld/", # project home page, if any
project_urls={
"Documentation": "/HelloWorld/",
"Source Code": "/HelloWorld/",
},
classifiers=[
'License :: OSI Approved :: Python Software Foundation License'
]
)