python解释器查找module进行加载的时候,查找的目录是存放在sys.path变量中的,sys.path变量中包含文件的当前目录。如果你想使用一个存放在其他目录的脚本,或者是其他系统的脚本,你可以将这些脚本制作成一个安装包,然后安装到本地,安装的目录就是sys.path中的一个。这样你就可以在任何想要使用module的地方,直接使用import导入就可以了。
用setup安装自定义模块:
打包module需要新建一个setup.py脚本,然后在脚本中输入下面的内容,假设你的需要打包的module的文件名是meal.py。
from distutils.core import setup setup(name = 'meal', version = '1.0', py_modules = ['meal'], )
在终端(windows的话,则是打开cmd)中输入
python setup.py sdist
你会发现在目录中多出一个文件夹dist,进入这个文件夹,会发现一个meal-1.0.tar.gz文件(windows的话,是meal-1.0.zip文件)。将这个压缩文件解压,进入解压的目录,执行下面的命令
python setup.py install
import meal help(meal)
用setup安装自定义包
自定义包的层级结构:
src中__init__.py内容
# -*- coding: utf-8 -*-
macpy中__init__.py内容
# -*- coding: UTF-8 -*- from __future__ import absolute_import from .Mac import * __version__ = '1.0.3' __license__ = 'MIT'
setup内容
# -*- coding: utf-8 -*- from distutils.core import setup from setuptools import find_packages setup(name = 'mac.py', version = '1.0.3', description = 'A python lib to search Manufacturer of mac address', long_description = '', author = 'hustcc', author_email = 'i@hust.cc', url = 'https://github.com/hustcc/mac.py', license = 'MIT', install_requires = [], classifiers = [ 'Intended Audience :: Developers', 'Operating System :: OS Independent', 'Natural Language :: Chinese (Simplified)', 'Programming Language :: Python', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.5', 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.2', 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Topic :: Utilities' ], keywords = 'mac.py,mac address,mac Manufacturer', packages = find_packages('src'), package_dir = {'':'src'}, include_package_data = True, package_data = {'src':['macpy/oui_3.dict', 'macpy/oui_3.dict']} )
setup函数还有一些参数:
1、packages
告诉Distutils需要处理那些包(包含__init__.py
的文件夹)
2、package_dir
告诉Distutils哪些目录下的文件被映射到哪个源码包。一个例子:package_dir = {'': 'lib'}
,表示“root package”中的模块都在lib目录中。
3、ext_modules
是一个包含Extension实例的列表,Extension的定义也有一些参数。
4、ext_package
定义extension的相对路径
5、requires
定义依赖哪些模块
6、provides
定义可以为哪些模块提供依赖
7、scripts
指定python源码文件,可以从命令行执行。在安装时指定--install-script
8、package_data
通常包含与包实现相关的一些数据文件或类似于readme的文件。如果没有提供模板,会被添加到MANIFEST文件中。
9、data_files
指定其他的一些文件(如配置文件)