关于pip:给定Python包的名称,要导入的模块的名称是什么?

Given the name of a Python package, what is the name of the module to import?

有人知道逻辑在Python does the modules of the actual names VS the name used in _包装容易安装吗?P></

一些(人amongst example),似乎不合逻辑:在我的位P></

  • 我们给easy_install mysql-pythonis,but the进出口import MySQLdb事实
  • 我们给easy_install python-memcachedis,but the进出口import memcache事实(without the trailing d)

我不T Way of the洽寻找到等价。有些模,我浏览了很多EN EN of to find。我做了什么?P></


遗憾的是,这种疯狂是没有办法的。包索引中的名称独立于您的模块名称import。灾难性的是,一些包共享模块名。如果同时安装这两个,应用程序将以均等的几率崩溃。(鲁比也有这个问题)

用python进行打包通常很可怕。根本原因是该语言没有包管理器。Ruby和Nodejs拥有全功能的软件包管理器gem和npm,并培育了以Github为中心的共享社区。NPM使发布包和安装包一样容易。Nodejs于2009年到达,已经有14K个包裹。古老的python包索引列出24K,ruby gems列出44K包。

幸运的是,有一个不错的python包管理器,叫做pip。PIP的灵感来源于Ruby的gem,但缺少一些重要的特性(例如,列出软件包,以及大规模升级)。讽刺的是,PIP本身安装起来很复杂。在流行的64位Windows上安装需要从源代码构建和安装两个包。这是对编程新手的一大要求。

python的开发人员对所有这些挫折一无所知,因为他们是经验丰富的程序员,从源代码轻松构建,并且他们使用带有打包python模块的Linux发行版。

在Python配备包管理器之前,成千上万的开发人员将不必要地浪费时间来重新设计这个轮子。

python 3解决了许多打包问题。没有任何用于python 3的包。


与公认的答案不同,这实际上是可能的,尽管确实相当麻烦。

模块名可以在包安装的元数据目录中找到top_level.txt文件。

要使用python访问它(将python-memcached替换为包名称):

1
2
3
4
>>> 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"一行程序":

1
2
cat $(python -c"import pkg_resources; \
print(pkg_resources.get_distribution('python-memcached').egg_info)"
)/top_level.txt

请记住,有些包安装了多个模块,因此我介绍的方法可以返回多个模块名。


1
pip search mysql

这也是一个很好的读物:为什么要使用PIP而不是简单安装?