相关疑难解决方法(0)

从蛋内部访问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
查看次数

如何在python安装的包中包含文本文件?

我创建了一个看起来像这样的 python 包:

/command
    /command
        module.py
        __main__.py
    README.md
    setup.py
    file.txt
Run Code Online (Sandbox Code Playgroud)

要安装我运行:

sudo python setup.py install
Run Code Online (Sandbox Code Playgroud)

现在当我打电话

$ command
Run Code Online (Sandbox Code Playgroud)

它显示此错误:

FileNotFoundError: [Errno 2] No such file or directory: '../file.txt'
Run Code Online (Sandbox Code Playgroud)

大约有模块setup.py__main__.pymodule.py 的内容

设置文件

import setuptools

setuptools.setup(
    name='command',
    ...
    entry_points={
        'console_scripts': [
            'command = command.__main__:main'
        ]
    }
)
Run Code Online (Sandbox Code Playgroud)

__main__.py

from . import module

def main():
    module.run('arg')
Run Code Online (Sandbox Code Playgroud)

模块.py

import shutil

# copy file.txt from command project into the directory where it is running
def run(arg):
    shutil.copyfile('../file.txt', './file.txt')
Run Code Online (Sandbox Code Playgroud)

通过以下方式安装此包后:

sudo …
Run Code Online (Sandbox Code Playgroud)

python installation include text-files setup.py

5
推荐指数
1
解决办法
2878
查看次数