我想从python路径中的某个地方加载一个文件(sys.path
),就像在Class.getResourceAsStream()
的java中一样。这个文件不是python模块,但我碰巧(ab)使用python包装来创建一个基本上包含JSON文件集合的repo。
因此,为了清楚起见,打包数据除了setup.py
文件外不包含任何python。这是一个里面没有蟒蛇的鸡蛋。
使用打包数据的项目是带有python代码的项目。
我使用pip install -e <the git URL>
来安装软件包。它最终出现在<env_path>/src/<repo>
的虚拟环境中。此位置显示为sys.path
中的一个条目。
是否有一个简单的库调用,让我找到一个这样的文件的绝对路径,而不必通过循环sys.path
来搜索文件?
类似的东西:
path = find_in_sys_path('campaigns/get.json')
......实际上应该调用find_in_sys_path
。
答案 0 :(得分:0)
结帐设置工具https://pythonhosted.org/setuptools/pkg_resources.html#resourcemanager-api
import pkg_resources
my_data = pkg_resources.resource_string(__name__, "campaigns/get.json")
答案 1 :(得分:0)
在阅读@larsmans comment之后,我意识到尽管我的包装数据不包含我可以用作加载资源的参考的python模块,但我可以轻松地从{{1}找到它的绝对路径用类似的东西:
sys.path
我以后可以用它来构建资源的路径:
path = filter(lambda x: 'rbx-api-mocks' in x, sys.path)[0]
# rbx-api-mocks is the "egg name"
我可能最终会这样做。