标签: pkg-resources

使用pkg_resources获取包版本?

在$ PYTHONPATH或sys.path中获取包的包版本的建议方法是什么?我记得pkg_resource模块有一些功能,但我找不到任何相关信息.请不要指向我使用version.py文件并以某种方式阅读它的解决方案.使用pkg_resources是可行的方法但究竟如何?

python pkg-resources

21
推荐指数
1
解决办法
6460
查看次数

从蛋内部访问python egg中的文件

问题是试图获得如何做到这一点的确切指示.之前几乎没有尝试,似乎不是完整的解决方案:

解决方案来移动包内的文件

读取为zip的解决方案

通过get_distribution访问元信息

手头的任务是阅读有关程序运行的蛋的信息.我理解的方法很少:

  1. 硬编码鸡蛋的位置并将其视为zip存档 - 将起作用,但不够灵活,因为如果将文件移动到另一个位置,则需要对其进行编辑和重新编译

  2. 使用ResourceManager().resource_filename(__name__, filename)- 这似乎是有限的,因为我无法访问鸡蛋内部的文件,但不能访问包内.文件名中的"../../EGG-INFO/PKG-INFO"等符号不起作用,给出KeyError.所以也没有好处.

  3. 使用dist = pkg_resources.get_distribution("dist_name")然后使用dist对象来获取信息,但我无法从文档中了解如何指定我的分发名称?它找不到它.

因此,我正在寻找关于使用pkg_resources.get_distributionplus的正确解决方案,最终有一个完整的解决方案来读取鸡蛋内部的任何文件会很高兴.

谢谢!

python pkg-resources

10
推荐指数
1
解决办法
3793
查看次数

为什么`virtualenv`找不到`pkg_resources`?

我正在尝试在Ubuntu中使用virtualenv来安装本地虚拟Python环境.当我运行shell命令时:

$ virtualenv ./virt_python
Run Code Online (Sandbox Code Playgroud)

它抛出一个无法导入的异常pkg_resources.但是当我打开一个Python shell并且from pkg_resources import load_entry_point运行正常时.作为参考,完整的堆栈跟踪如下.

$ virtualenv ./virt_python
New python executable in ./virt_python/bin/python
Installing setuptools............done.
Installing pip.......
  Complete output from command /home/rpsharp/local/...hon/bin/easy_install /usr/local/lib/pytho...pport/pip-1.1.tar.gz:
  Traceback (most recent call last):
  File "/home/rpsharp/local/workspace/invest-natcap.invest-3/virt_python/bin/easy_install", line 5, in <module>
    from pkg_resources import load_entry_point
ImportError: No module named pkg_resources
----------------------------------------
...Installing pip...done.
Traceback (most recent call last):
  File "/usr/local/bin/virtualenv", line 9, in <module>
    load_entry_point('virtualenv==1.7.1.2', 'console_scripts', 'virtualenv')()
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 928, in main
    never_download=options.never_download)
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 1042, in …
Run Code Online (Sandbox Code Playgroud)

python pkg-resources virtualenv python-wheel

9
推荐指数
1
解决办法
1万
查看次数

pkg_resources.resource_stream在python3上失败

我正在尝试加载我的项目中使用的资源,pkg_resources但它只是抛出一个异常,说它引用"无法为没有'get_data()'的加载器执行此操作".我不确定我在这里做错了什么,或者是否pkg_resources在python 3.3上以某种方式被破坏了.我准确地使用python 3.3.3.这是我试图执行的代码

>>> import pkg_resources
>>> data = pkg_resources.resource_stream('configgenerator', 'schema_rules.yml')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/users/frank/workspace/configgenerator/env/lib/python3.3/site-packages/distribute-0.6.31-py3.3.egg/pkg_resources.py", line 931, in resource_stream
    self, resource_name
  File "/home/users/frank/workspace/configgenerator/env/lib/python3.3/site-packages/distribute-0.6.31-py3.3.egg/pkg_resources.py", line 1207, in get_resource_stream
    return StringIO(self.get_resource_string(manager, resource_name))
  File "/home/users/frank/workspace/configgenerator/env/lib/python3.3/site-packages/distribute-0.6.31-py3.3.egg/pkg_resources.py", line 1210, in get_resource_string
    return self._get(self._fn(self.module_path, resource_name))
  File "/home/users/frank/workspace/configgenerator/env/lib/python3.3/site-packages/distribute-0.6.31-py3.3.egg/pkg_resources.py", line 1289, in _get
    "Can't perform this operation for loaders without 'get_data()'"
NotImplementedError: Can't perform this operation for loaders without 'get_data()'
>>> 
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何解决这个问题?

python pkg-resources python-3.x

9
推荐指数
1
解决办法
2107
查看次数

为什么我安装的应用程序处理pkg_resources.iter_entry_points的方式与源代码不同?

我有一个Python应用程序,通过查找插件pkg_resources.iter_entry_points.

当直接从源结账运行时,这将找到sys.path适合账单的任何内容,包括恰好适用.egg-infosetuptools查找的源检出.

然而,当我通过任何地方安装软件包时python setup.py install,它突然停止检测所列举的所有内容sys.path,而只是查找与其一起安装的内容site-packages.

  • 为什么pkg_resources.iter_entry_pointsvanilla source checkout v.已安装的应用程序的行为有所不同?
  • 我怎样才能让它遍历所有内容sys.path,就像在开发中一样?

python setuptools pkg-resources

8
推荐指数
1
解决办法
344
查看次数

如何使用 setuptools 和 pkg_ressources 获取安装目录

我正在处理P带有 setuptools 和 pkg_resources 的包,该包在安装后需要下载一些二进制文件并将它们放在专用目录 ( P/bin/) 中。

我正在尝试使用pkg_ressources.resource_filename来获取绝对目录路径。(为了与 virtualenv 一起工作)

在使用 安装期间python setup.py install, pkg_ressources.resource_filename 不会返回类似 的路径/home/user/tests/venv/lib/python3.4/site-package/P/bin/,而是返回实际模块的路径,例如/home/user/projects/P/P/bin/

这是一个问题,因为我需要安装目录(在 virtualenv 内),而不是我的个人项目目录(我开发模块的地方)。

如果我尝试通过 pypi,使用pip install module,返回的目录pkg_ressources.resource_filename是一个临时文件,例如/tmp/pip-build-xxxxxxx/P/bin/,这又不是应该放置二进制文件的地方。

这是我的 setup.py:

from setuptools import setup
import os

from setuptools.command.install import install as _install
from pkg_resources import resource_filename


def post_install():
    """Get the binaries online, and give them the execution permission"""
    package_dir_bin = resource_filename('P', 'bin') # should be /home/user/tests/venv/lib/python3.4/site-package/P/bin/ …
Run Code Online (Sandbox Code Playgroud)

python packaging setuptools pkg-resources

7
推荐指数
1
解决办法
3941
查看次数

python中pkg_resource中resource_filename的参数

我不明白 pkg_resource.resource_filename() 到底是如何工作的以及它的参数是什么。我在网上搜索了很多,但他们的官方文档并没有很好地涵盖它。有人可以解释一下吗?

python pkg-resources

7
推荐指数
1
解决办法
9695
查看次数

如何在 FastAPI 中提供静态文件

我正在尝试提供 package_docs 目录中的静态文件。当我在浏览器中打开时:

http://127.0.0.1:8001/packages/docs/index.html,页面正在运行。

但是我想打开页面:http : //127.0.0.1 : 8001/packages/docs/

没有源文件。输出是 404 Not Found

app.mount("/packages/docs", 
    StaticFiles(directory=pkg_resources.resource_filename(__name__, 'package_docs')
    ), 
    name="package_docs")

@app.get("/packages/docs/.*", include_in_schema=False)
def root():
    return HTMLResponse(pkg_resources.resource_string(__name__, "package_docs/index.html"))


app.include_router(static.router)
app.include_router(jamcam.router, prefix="/api/v1/cams", tags=["jamcam"])
Run Code Online (Sandbox Code Playgroud)

如何更改我的代码?任何建议都会有所帮助。先感谢您。

routes pkg-resources static-files python-3.x fastapi

7
推荐指数
4
解决办法
8600
查看次数

如何在一个位置处理多个平台的python egg?

我们为所有系统安装了一个常见的python,以确保每个系统都具有相同的python安装并简化配置问题.此安装位于共享驱动器上.我们还有多个共享此安装的平台.我们通过在编译python时设置--exec-prefix configure选项来解决冲突的特定于平台的文件.

我的问题是我现在想要使用依赖于平台的easy_install(或其他)来安装一个鸡蛋.easy_install将egg放在安装的独立于平台的部分的site-packages目录中.鸡蛋的名称中有平台,所以不应该有冲突.但是python只会加载它找到的第一个.(因此,在Solaris上它可能会尝试加载Linux egg).修改easy-install.pth文件可以改变它找到的文件,但这是无用的.

我可以将.egg文件移动到平台依赖的包目录中,然后使用pkg_resources.require()加载它们(或手动调整路径).但似乎我不应该这样做,因为平台是以鸡蛋的名义.

有没有更通用的方法我可以确保python将加载鸡蛋为正确的平台?

python pkg-resources easy-install

6
推荐指数
1
解决办法
1057
查看次数

cx_freeze 没有名为“pkg_resources”的模块

我在 Windows 8.1 上使用 Python 3.3.5 和 cx-freeze 4.3.3。

我正在尝试 cx_freeze 一个使用 pkg_resources 的程序。

我最初将它放在包下的安装文件中,但是当我尝试冻结它时,进程因错误而停止Import Error: No module named 'pkg_resources'

在此处输入图片说明

然后我将它在安装文件中从包移动到包含。这次 cx_freeze 进程完成了,但是当我尝试启动应用程序时,我收到了另一条错误消息。

在此处输入图片说明

如果我去我的 IDE 并尝试导入 pkg_resources 它工作正常。

>>> import pkg_resources
>>> pkg_resources
<module 'pkg_resources' from 'C:\\Python33\\lib\\site-packages\\setuptools-18.0.1-py3.3.egg\\pkg_resources\\__init__.py'>
Run Code Online (Sandbox Code Playgroud)

这里问一个类似的问题解决方法是重新安装setuptools。所以我下载了 setuptools 18.0.1 并通过 cmd 安装了它,但它没有解决我的问题,我仍然遇到与 cx_freeze 相同的错误。

任何帮助使其正常工作将不胜感激。

编辑:我的解决方案(hack)是从 yagmail 中编写依赖项。Yagmail 的原始 _innit__.py...

from pkg_resources import get_distribution
__project__ = 'yagmail'
__version__ = get_distribution(__project__).version
Run Code Online (Sandbox Code Playgroud)

我首先在那里放了一个打印语句来获取版本,然后对其进行硬编码。

__project__ = 'yagmail'
__version__ = '0.4.84'
Run Code Online (Sandbox Code Playgroud)

虽然这解决了我的问题,但它并不是真正的答案,所以如果有人有一个保留 pkg_resources.

python pkg-resources cx-freeze python-3.x

6
推荐指数
0
解决办法
1102
查看次数