菜比之路

走菜比的路,让大牛说去吧
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

【python】用setup安装自定义模块和包

Posted on 2016-09-07 16:02  毕加索的ma  阅读(11233)  评论(0编辑  收藏  举报

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 

  

   安装正确,会显示安装的目录(C:\Python27\Lib\site-packages)。
   接下来,你就可以在脚本中直接使用这个module了。当然了,使用之前,还是需要导入的。
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
指定其他的一些文件(如配置文件)