Bạn có thể muốn sử dụng thư viện pkg_resources
đi kèm với setuptools
.
Ví dụ, tôi đã thực hiện lên một cách nhanh chóng ít gói "proj"
để minh họa cho chương trình tổ chức tài nguyên Tôi muốn sử dụng:
proj/setup.py
proj/proj/__init__.py
proj/proj/code.py
proj/proj/resources/__init__.py
proj/proj/resources/images/__init__.py
proj/proj/resources/images/pic1.png
proj/proj/resources/images/pic2.png
Chú ý làm thế nào tôi giữ tất cả các nguồn lực trong một gói con riêng biệt.
"code.py"
cho thấy cách pkg_resources
được sử dụng để tham khảo các đối tượng tài nguyên:
from pkg_resources import resource_string, resource_listdir
# Itemize data files under proj/resources/images:
print resource_listdir('proj.resources.images', '')
# Get the data file bytes:
print resource_string('proj.resources.images', 'pic2.png').encode('base64')
Nếu bạn chạy nó, bạn nhận được:
['__init__.py', '__init__.pyc', 'pic1.png', 'pic2.png']
iVBORw0KGgoAAAANSUhE ...
Nếu bạn cần phải đối xử với một nguồn tài nguyên như một fileobject, sử dụng resource_stream()
.
Mã truy cập tài nguyên có thể ở bất kỳ đâu trong cấu trúc gói con của dự án, chỉ cần tham khảo gói phụ chứa hình ảnh theo tên đầy đủ: proj.resources.images
, trong trường hợp này.
Dưới đây là "setup.py"
:
#!/usr/bin/env python
from setuptools import setup, find_packages
setup(name='proj',
packages=find_packages(),
package_data={'': ['*.png']})
Nên biết trước: Để kiểm tra điều "cục bộ", có nghĩa là w/o cài đặt gói đầu tiên, bạn sẽ phải gọi các kịch bản thử nghiệm của bạn từ thư mục đó có setup.py
. Nếu bạn đang ở trong cùng một thư mục với tên code.py
, Python sẽ không biết về gói proj
. Vì vậy, những thứ như proj.resources
sẽ không giải quyết được.
Vâng, những bất lợi ở đây là quá nhiều. Không phải là một cách đơn giản lành mạnh để đóng gói tài nguyên với các dự án Python? –
Tôi biết chỉ có 2 cách được hỗ trợ rộng rãi (chúng không đơn giản): 1) 'distutils'-way (tiêu chuẩn): tài liệu truy cập tài nguyên tập tin như một bài tập cho người đọc (có thể vì họ nghĩ rằng thao tác đường dẫn liên quan đến '__file__' là tất cả nhu cầu). 2) 'cách cài đặt' (thay thế 'dấu ngắt '), được mô tả ở trên. –