在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上的另一个安装程序(下一个:)?