是否有人知道背后的Python的逻辑模块名称VS中的easy_install实际使用的软件包的名称?
几个(其中包括)的例子,似乎有点unlogical对我说:
- 我们做
easy_install mysql-python
,但进口其实是在import MySQLdb
- 我们做
easy_install python-memcached
,但进口实际上是import memcache
(无尾d)
我没有找到找到等价的一致方法。 对于某些模块,我花了很多浏览找到它。 我究竟做错了什么?
遗憾的是,还有的疯狂没有方法。 在名称包指数是独立的,你的模块名称的import
。 灾难性的一些包共享模块名称 。 如果同时安装,应用程序将与赔率甚至打破。 ( Ruby有这个问题太 )
包装在Python一般是可怕的。 根本原因在于语言没有船只的软件包管理器。 Ruby和船舶的NodeJS与功能齐全的软件包管理器宝石和NPM,并培育周围的GitHub中心共享社区。 NPM使得出版包一样容易安装。 赶到的NodeJS 2009年,已经有14K包 。 久负盛名的Python包指数列出24K。 红宝石宝石列出44K包。
幸运的是,Python的一个体面的包管理器,叫皮普 。 皮普是Ruby的宝石启发,但缺乏一些重要功能(如上市包和升级EN质量 )。 讽刺的是,皮普本身是复杂的安装 。 上流行的64位Windows安装需要构建和从源代码安装这两个包。 这是一个很大的要求,任何人新的节目。
Python的开发者是无知的这一切的挫折,因为他们都是经验丰富的程序员,从源头舒适的建筑,以及他们使用的Linux发行版打包带Python模块。
直到Python中附带的软件包管理器,数以千计的开发人员会无谓地浪费时间重新发明轮子。
Python 3中解决了包装的诸多问题。 有没有为Python 3的任何程序包 。
不同于接受的答案表明,它实际上是可能的,虽然确实挺麻烦的。
模块名称(一个或多个)可以发现top_level.txt
在封装安装的元数据目录中的文件。
为了与Python访问它(更换python-memcached
与你的包名):
>>> import pkg_resources as pkg # included in setuptools package
>>> metadata_dir = pkg.get_distribution('python-memcached').egg_info
>>> open('%s/%s' % (metadata_dir, 'top_level.txt')).read().strpline()
'memcache'
或等效bash的“一个班轮”:
cat $(python -c "import pkg_resources; \
print(pkg_resources.get_distribution('python-memcached').egg_info)")/top_level.txt
请记住,一些软件包安装多个模块,所以我提出的方法可以返回多个模块的名称。
pip search mysql
这是良好的阅读太: 为什么要使用PIP过的easy_install?
文章来源: Given the name of a Python package, what is the name of the module to import?