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.egg
和site-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
- Python的package安装到哪里了?
- yum 安装的程序 安装到哪里了?
- yum 安装的程序 安装到哪里了?
- Ubuntu的软件都安装到哪里去了
- Python安装新的package
- 我的图标到哪里去了?
- 中国人的想象力到哪里去了?
- csdn的私信到哪里去了?
- linux的内存到哪里去了
- 如何知道rpm包把其中的文件安装到哪里去了?
- 怎么查看Ubuntu的软件都安装到哪里去了呢?
- ubuntu如何知道软件安装到哪里了
- ubuntu如何知道软件安装到哪里了
- win7上使用VM安装centos7,安到哪里了
- brew把maven安装到哪里去了
- deepin安装jetbrain系列破解+究竟装到哪里了
- git 上的 python package 的安装
- 安装python package的经验和常用命令
- 第十一周项目1--(1)层次遍历算法的验证
- spark源码解读2之水塘抽样算法(Reservoir Sampling)
- 【a802】最少转弯问题
- spark源码解读3之RDD中top源码解读
- 简单工厂模式
- Python的package安装到哪里了?
- Windows下如何用cmd自动打开/关闭Oracle的服务
- C语言判断两个数组是否有相同的元素
- 一天一条Linux指令-cal
- 做练习中学到的和复习的css内容
- 互联网经济的未来
- linux kernel development 学习第一天之inline 和likely
- HDFS详解一
- MyBatis:SQL语句中的foreach的详细介绍