Python的package安装到哪里了?

来源:互联网 发布:天猫淘宝网乐视手机 编辑:程序博客网 时间:2024/05/01 09:18

Python的package安装到哪里了?

package放到哪里去了? 怎么好像乱七八糟的?

打开site-packages目录, 里面是各种安装好的包. 但是目录名格式各异. 这是怎么回事?
经过观察, 有这么四种:

  • 1.
    site-packages/pylab.py

    这种是最好理解的, 因为单个.py文件就可以作为module被引用. 虽然丑了点, 但是单独扔在site-packages下也没问题.

  • 2.
    site-packages/toolz
    site-packages/toolz-0.8.0-py2.7.egg-info

    这种包, 有两个目录, 一个目录以包名命名, 因为含有__init__.py的目录, 可以作为module被引用.
    另一个egg-info目录是一些metadata, 没什么大用, 有些包也没有这个目录.

  • 3.
    site-packages/fasttext-0.7.6-py2.7-linux-x86_64.egg

    单独一个.egg文件. 这种包, 是把模块都打进了一个egg压缩包里. 这个压缩包可以视为一个目录, 模块文件在这里: site-packages/fasttext-0.7.6-py2.7-linux-x86_64.egg/fasttext

  • 4.
    site-packages/titlectr-0.1-py2.7.egg

    虽然文件名跟3相同, 但是这是一个目录, 可以视为是3解压后的样子. 模块文件在这个目录里: site-packages/titlectr

我们知道, site-packages是在模块搜索的path(sys.path)里的, 所以1和2这两种存放包的方式, 可以直接被搜索到, 可以直接import, 但是3和4这两种方式, 包是在子目录中, 所以无法直接import. 于是安装的时候, 安装工具会将.egg目录加入到path中(.pth文件). 比如将site-packages/fasttext-0.7.6-py2.7-linux-x86_64.eggsite-packages/titlectr-0.1-py2.7.egg写入到site-packages/easy_install.pth中. 也可以写在其他的site-packages/*.pth中, 比如给每个package单独建一个.pth文件.

python有两个setup工具, 一个是setuptools(from setuptools import setup), 另一个是distutil(from distutil import setup).

  • setuptools安装的包, 会形如3和4的样子. 这个工具有完善的打egg包的功能, 也倾向于把模块的功能部分和metadata打成一个整体(egg), 方便管理. 使用python setup.py bdist_egg命令, 可以将module打成egg包, 方便部署.
  • distutil. 我们在使用的时候发现, distutil不会在打包上做首选尝试. 如果不需要复杂的编译操作, distutil会直接把源码包复制到site-pacakages下(参见2), 并创建一个和模块并列的metadata. 如果package中有个大文件比如字典(当然很不推荐将大字典封装作为package的一部分, 一般外挂), 使用setuptools, 会耗费极大的时间在打包egg上, 而distutil可以直接拷贝安装.
  • 除此之外, wheel是一种新的格式. 更类似于java的jar包. python setup.py bdist_wheel可以打包成wheel包. 更多打包信息可以参考这里

参考文献
packaging python

0 0
原创粉丝点击