setuptools
setuptools是Python distutils增强版的集合,它可以帮助我们更简单的创建和分发Python包,尤其是拥有依赖关系的。用户在使用setuptools创建的包时,并不需要已安装setuptools,只要一个启动模块即可。
检查是否按照setuptools,可以import setuptools来测试。
创建一个简单的包
在pycharm下新建py文件,如以下格式
demo
├── setup.py
└── src
└── demo
├── __init__.py
├── aaa.txt
└── data
├── abc.dat
└── abcd.dat
新建setup.py文件
import os
from setuptools import setup, find_packages
def read(fname):
return open(os.path.join(os.path.dirname(__file__), fname), encoding='utf-8').read()
setup(
name = 'xxx',
version = '999.0.0-developing',
author = 'xxx',
author_email = 'xxx',
description = 'xxx',
long_description = read('README.md'),
license = 'MIT',
url = 'xxxi',
packages = find_packages('xxx', exclude=['tests']) ,
#exclude可以排除一些特定的包
)
如果不加控制,则setuptools只会将__init__.py加入到egg中,想要将这些文件都添加,需要修改setup.py
from setuptools import setup, find_packages
setup(
packages = find_packages('src'), # 包含所有src中的包
package_dir = {'':'src'}, # 告诉distutils包都在src下
package_data = {
# 任何包中含有.txt文件,都包含它
'': ['*.txt'],
# 包含demo包data文件夹中的 *.dat文件
'demo': ['data/*.dat'],
}
)
包含所有包内文件
from setuptools import setup, find_packages
setup(
...
include_package_data = True
)
包含一部分,排除一部分
from setuptools import setup, find_packages
setup(
...
packages = find_packages('src'),
package_dir = {'':'src'},
include_package_data = True,
# 排除所有 README.txt
exclude_package_data = { '': ['README.txt'] },
)
检查setup.py
是否有错误或警告:python setup.py check
执行python setup.py bdist_egg
在dist中生成的是egg包,.egg文件其实是一个zip包,可解压:unzip -l demo-0.1-py3.6.egg 。解压可以看到,.egg文件里面是一些自动生成的文件。可以看出这个.egg文件包含了demo.egg-info文件内的一些文件名。
执行:python setup.py install
注意事项,注意__init__,__init__需要在每个文件下放置。
等以上安装完成,
在python终端中,直接导入这个包,检查该模块是否能成功使用
卸载
pip uninstall XXX包名即可完成
参考文章