- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想找到一个文件的分布。该文件应该发现它自己的分布。
我试过了,但是不行:
import os
import pkg_resources
for dist in pkg_resources.find_distributions(os.path.dirname(__file__)):
print dist
上面的文件是使用pip install -e ...
安装的。
我在文档中找不到解决方案:
https://pythonhosted.org/setuptools/pkg_resources.html#distribution-objects
解决方案不应包含包的字符串。它应该是通用的。
最佳答案
pkg_resources
分发 API 需要一个分发名称;这不一定与“当前”模块在其下运行的包名称相关。
以 BeautifulSoup 项目为例。当前版本使用 bs4
作为包名,但 PyPI 上的分发名称是beautifulsoup4
.
一个发行版也可以包含多个顶级包或模块; pkg_resources
模块本身是 setuptools
分发的一部分,例如,连同 setuptools
包。
因此,您不能概括和使用__file__
或__package__
并希望始终获得相应的分布。
如果您的发行版是作为 egg 安装的(例如使用 easy_install
或 zc.buildout
),那么您可以搜索 .egg
路径中的扩展名,在该位置拆分路径并使用 Distribution.from_filename()
从中生成一个 Distribution
对象;文件名包含所有必要的信息。但是,如果您的包是使用 pip
安装的,则会创建一个单独的 .egg-info
文件,您又回到了原点(无法找到分发名称)。
另一方面,您可以使用 pkg_resources.Environment()
instance 为您的环境获取所有 Distribution
对象;但是您会遇到将现有发行版与给定模块或包匹配的相同问题,至少不会遇到公共(public) API。您可以扫描所有分布,.location
属性(对于鸡蛋)和(私有(private))Distribution._provider
属性的组合以及(完全可选)installed-files.txt
元数据条目(如果可用,包含相对路径(!))的存在将让您扫描整个环境以寻找匹配的分发,但这完全是取决于各种 resource providers 的内部实现细节.而且它可能是一个昂贵的搜索,当然对于更大的安装。
因此,您最好的选择是只使用硬编码的分发名称。
关于python - pkg_resources : get own distribution?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22610578/
我试图在同一个 python 脚本中使用同一个库的两个不同版本(使用 easy_install --multi-version 安装)。下面的代码说明了总体思路。 如果我独立调用每个版本,一切都很好。
我无法导入 pkg_resources。每当我尝试时它都会显示 Python 3.5.2 (default, Jun 28 2016, 08:46:01) [GCC 6.1.1 20160602] o
无法让“intel-nauta”运行,因为它抛出此错误:pkg_resources.DistributionNotFound:未找到“jsonschema”发行版,并且是应用程序所需的[19160]
Pip 看到一个版本为 1.4.0 的包,但随后提示说我需要它的 >=0.9.34 版本。不是 1.4.0 > 0.9.34 吗? root@36e7a0a55174:~/tldr-integrati
为什么 this simple program导致运行时出现 pkg_resources.DistributionNotFound 错误,我们该如何解决? #setup.py from setupto
我正在尝试使用 reviewcode python/django 的 git 存储库。安装时 easy_install ReviewBoard 我收到以下错误 Setup script exited
我正在尝试使用端口 80。所以当我使用命令“sudo paster serve development.ini --reload” 我收到这个错误 pkg_resources.VersionConfl
我正在尝试在 Google App Engine 上安装一个软件包。该软件包相当广泛地依赖于 pkg_resources,但无法在 App Engine 上运行 setup.py。 但是,源代码中没有
我想找到一个文件的分布。该文件应该发现它自己的分布。 我试过了,但是不行: import os import pkg_resources for dist in pkg_resources.find_
我正在处理 CSV 文件并具有以下工作代码: reader = csv.reader(open(filename, 'rU'), dialect='excel') header = reader.ne
我尝试使用 pip install tensorflow --upgrade 升级 tensorflow。在卸载旧版本的 setuptools 期间出现了一些错误: PermissionError:
在 $PYTHONPATH 或 sys.path 中获取包的包版本的推荐方法是什么? 我记得 pkg_resource 模块对此有一些功能,但我找不到任何相关信息。请不要向我指出使用 version.
我正在将 Django 应用程序部署到开发服务器并在运行 pip install -r requirements.txt 时遇到此错误: Traceback (most recent call las
我正在尝试安装一个新模 block ,但我发现 pip不起作用 - 它显示 pkg_resources.DistributionNotFound: The 'pip==1.5.6' distribut
我想在MacOS上使用Python3.7 我已经是Python 2.7版本了。 我在.bash_profile,alias python="/usr/local/bin/python3.7"和sour
如何纠正这个错误: Traceback (most recent call last): File "c:\Apps\pypi\bin\buildout-script.py", line 15,
我想安装这个 repo https://github.com/armooo/cloudprint在我的树莓派上。说明在这里 https://baxeico.wordpress.com/2014/06/
我正在尝试使用 Py2Exe 从 ReviewBoard 的 postreview.py 构建 Windows 可执行文件,因此我的用户无需安装 Python 即可发布评论请求。 我遇到了编译版本找不
我正在尝试使用 Pyinstaller 打包我的 Python 脚本。我的脚本导入了第三方模块 Exscript 和 Netaddr。当我尝试运行 Pyinstaller 生成的可执行文件时出现以下错
我正在尝试通过以下命令使用 cx_Freeze setup.py 文件构建 EXE: python setup.py bdist_msi 命令的输出以:结尾 Copying data from pac
我是一名优秀的程序员,十分优秀!