如何解决python:如何将已安装软件包的资源递归复制到磁盘
我有一个python软件包,其中包含一些非python文件(使用MANIFEST文件包含在发行版中),例如:
.
├── example
│ ├── __init__.py
│ ├── data
│ │ ├── __init__.py
│ │ ├── text_dir
│ │ │ ├── __init__.py
│ │ │ └── text-file.txt
│ │ └── json_dir
│ │ ├── __init__.py
│ │ └── json-file.json
│ └── some_code.py
├── README.rst
├── MANIFEST.in
└── setup.py
正在从some_code
模块访问非python资源,但有时我还想使用data
将some_code.py
的内容递归复制到其他目录。我使用importlib.resources
来达到以下目的(我在python 3.8上使用):
import os
import shutil
import pathlib
from importlib import resources as il_resources
def resource_copy(package,target_root_dir,_pkg_root=None):
pkg_name = package if isinstance(package,str) else package.__name__
if _pkg_root is None:
_pkg_root = pkg_name
subdir = pkg_name[len(_pkg_root) + 1 :].replace(".",os.sep)
target_dir = os.path.join(target_root_dir,subdir)
pathlib.Path(target_dir).mkdir(parents=True,exist_ok=True)
for item in il_resources.contents(package):
if not item.startswith("_"):
if il_resources.is_resource(package,item):
with il_resources.open_text(package,item) as srcf,open(
os.path.join(target_dir,item),"w"
) as dstf:
shutil.copyfileobj(srcf,dstf)
else:
resource_copy(f"{pkg_name}.{item}",_pkg_root=_pkg_root)
resource_copy("example.data","/tmp/data_copy")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。