首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给定Python包的名称,那么要导入的模块的名称是什么?

给定Python包的名称,那么要导入的模块的名称是什么?
EN

Stack Overflow用户
提问于 2012-07-12 22:18:14
回答 2查看 8.6K关注 0票数 39

有人知道Python模块名称与easy_install中实际使用的包名称之间的逻辑关系吗?

我举了几个(在其他例子中)似乎有点不合逻辑的例子:

导入实际上是import MySQLdb

  • We do easy_install python-memcached,但导入实际上是import memcache (没有尾随的d)

我没有找到一种一致的方法来找到等价性。对于一些模块,我花了很多时间才找到它。我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-12 22:24:20

令人遗憾的是,目前还没有疯狂的方法。package index中的名称独立于您import的模块名称。灾难性的some packages share module names。如果这两个都安装,你的应用程序就会崩溃。(Ruby has this problem too)

Python中的打包通常很糟糕。根本原因是该语言发布时没有包管理器。Ruby和Nodejs附带了功能齐全的包管理器Gem和Npm,并培育了以GitHub为中心的共享社区。Npm使publishing packages和安装它们一样简单。Nodejs于2009年问世,并已拥有14k packages。古老的Python包索引列出了24k。Ruby Gems列出了44k个包。

幸运的是,Python有一个不错的包管理器,叫做Pip。Pip的灵感来自Ruby的Gem,但缺少一些重要的功能(例如,列出软件包和upgrading en masse)。具有讽刺意味的是,Pip本身就是complicated to install。在流行的64位Windows上安装需要从源代码构建和安装两个包。对于编程新手来说,这是一个很大的要求。

Python的开发人员对所有这些挫折一无所知,因为他们是经验丰富的程序员,喜欢从头开始构建,而且他们使用Linux发行版和打包的Python模块。

在Python发布包管理器之前,数以千计的开发人员将不必要地浪费时间重新发明轮子。

Python3解决了许多打包问题。好了,aren't any packages for Python 3

票数 21
EN

Stack Overflow用户

发布于 2019-02-24 22:50:56

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

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

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

代码语言:javascript
复制
>>> 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().rstrip()
'memcache'

或者使用等效的bash "one liner":

代码语言:javascript
复制
cat $(python -c "import pkg_resources; \
print(pkg_resources.get_distribution('python-memcached').egg_info)")/top_level.txt

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

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11453866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档