问题是试图获得如何做到这一点的确切指示.之前几乎没有尝试,似乎不是完整的解决方案:
手头的任务是阅读有关程序运行的蛋的信息.我理解的方法很少:
硬编码鸡蛋的位置并将其视为zip存档 - 将起作用,但不够灵活,因为如果将文件移动到另一个位置,则需要对其进行编辑和重新编译
使用ResourceManager().resource_filename(__name__, filename)- 这似乎是有限的,因为我无法访问鸡蛋内部的文件,但不能访问包内.文件名中的"../../EGG-INFO/PKG-INFO"等符号不起作用,给出KeyError.所以也没有好处.
使用dist = pkg_resources.get_distribution("dist_name")然后使用dist对象来获取信息,但我无法从文档中了解如何指定我的分发名称?它找不到它.
因此,我正在寻找关于使用pkg_resources.get_distributionplus的正确解决方案,最终有一个完整的解决方案来读取鸡蛋内部的任何文件会很高兴.
谢谢!
我创建了一个看起来像这样的 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__.py和module.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)