在python的virtualenv中安装pip后如何访问资源文件?
假设我有这个项目结构:在python的virtualenv中安装pip后如何访问资源文件?,python,resources,virtualenv,python-wheel,Python,Resources,Virtualenv,Python Wheel,假设我有这个项目结构: src |my_package __init__.py |utils __init__.py util.py |resources __init__.py my_resource.yml 在util.py中,我有以下代码需要资源文件才能工作: import yaml import importlib.resources from my_package import resources cla
src
|my_package
__init__.py
|utils
__init__.py
util.py
|resources
__init__.py
my_resource.yml
在util.py中,我有以下代码需要资源文件才能工作:
import yaml
import importlib.resources
from my_package import resources
class Util:
def merge_settings(self, settings: dict)->dict:
with importlib.resources.path(resources, 'my_resource.yml') as p:
with open(p) as file:
default_settings = yaml.safe_load(file)
在我的开发环境中,一切都很好
然后,我用setup.py文件中的以下代码制作了一个轮子:
import setuptools
import glob
resource_folder = 'my_package/resources'
setuptools.setup(
name="my_package",
version="0.3",
packages=setuptools.find_packages(),
data_files=[(resource_folder, glob.glob(resource_folder+r'/*.yml'))]
然后我创建一个轮子:
python .\setup.py bdist_wheel
最后,我使用名为my_env的虚拟环境将其安装到另一个项目中:
(my_env) D:\dev pip install my_package-0.3-py3-none-any.whl
但由于以下原因,我的代码不再运行:
importlib.resources.path(resources, 'my_resource.yml')
原因是在浏览my_env文件夹时发现,my_resource.yml不再在my_包中
my_env
|my_package
|resources
my_resource.yml
|Lib
|site-packages
|my_package
|resources
__init__.py
但是这个位置可以很容易地修改这个文件。。。如何在开发环境中正确调用资源,以及在pip安装后使用它?我想总是有权访问yml文件的版本时需要的,即使是在pip安装
Tks为您的帮助您的
数据文件
指定错误,并且不是您想要的设置(它用于非软件包数据)。数据文件
中的键是从前缀的根开始放置的(比如说,您将软件包安装到/venv
中,而不是以/venv/lib/python>结尾的数据。#/site packages/my_package/resources/…
它们最终将位于venv/my_package/resources
,这肯定不是您想要的!)
您需要的实际设置是:
package\u数据={
“my_package.resources”:“*.yml”,
},
映射从虚线包名映射到globs,并将其放置在站点包中
无需使用清单.in
等,因为这些文件会自动包含在包中
有关这方面的详细信息,我您的
数据\u文件
既没有正确指定,也不是您想要的设置(它是针对非软件包数据的)。数据文件
中的键是从前缀的根开始放置的(比如说,您将软件包安装到/venv
中,而不是以/venv/lib/python>结尾的数据。#/site packages/my_package/resources/…
它们最终将位于venv/my_package/resources
,这肯定不是您想要的!)
您需要的实际设置是:
package\u数据={
“my_package.resources”:“*.yml”,
},
映射从虚线包名映射到globs,并将其放置在站点包中
无需使用清单.in
等,因为这些文件会自动包含在包中
关于这方面的更多信息,我tks Anthony,顺便说一句,还有很棒的视频;)pyinstaller上的另一个:下一个:)?tks Anthony,顺便说一句,还有很棒的视频;)pyinstaller上的另一个安装程序(下一个:)?