Đây sẽ là một câu hỏi rất phổ biến đối với các nhà phát triển đã sử dụng "setup.py" để xây dựng các gói cài đặt và nó nên được hỏi trước nhưng tôi không thể tìm thấy câu trả lời đúng ở bất kỳ đâu.Bất kỳ hàm python nào để lấy thư mục gốc "data_files"?
Trong setup.py
from distutils.core import setup
setup(
....,
....,
data_files=[('MyApp/CBV', ['myapp/data/CBV/training.cbv', 'myapp/data/CBV/test.cbv'])],
....,
....,
)
Kết quả sudo python setup.py cài đặt
running install
running build
running build_py
running build_scripts
running install_lib
running install_scripts
running install_data
creating /usr/local/MyApp/CBV
copying MyApp/data/CBV/training.cbv -> /usr/local/MyApp/CBV
copying MyApp/data/CBV/test.cbv -> /usr/local/MyApp/CBV
running install_egg_info
Removing /usr/local/lib/python2.7/dist-packages/MyApp-0.1.0.egg-info
Writing /usr/local/lib/python2.7/dist-packages/MyApp-0.1.0.egg-info
Từ quan sát sử dụng kết quả trên, "/ usr/local" là thư mục gốc "data_files". Khác với mã hóa cứng, có bất kỳ hàm Python nào có thể cung cấp cho tôi thư mục gốc "data_files" này không?
Với gợi ý từ Martijn Pieters, đây là giải pháp của tôi
Trong setup.py
from setuptools import setup
setup(
....,
....,
package=['myapp'],
package_data={'': ['data/CBV/*.cbv']},
....,
....,
)
Cách sử dụng
import pkg_resources
my_data_file = pkg_resources.resource_filename(__name__, 'data/CBV/test.cbv')
print my_data_file
Hiện nay, tôi đang sử dụng "thiết lập" từ "distutils". Có thể mất một lúc để kiểm tra xem giải pháp của bạn có thể giúp tôi không :) –
@JessadaThutkawkorapin: Việc chuyển sang 'setuptools' đủ dễ dàng. :-) Nó tương thích ngược với 'distutils', và chắc chắn có thể đề xuất! –
Trong khi tôi đang tìm kiếm sự khác biệt giữa disutils và setuptools, tôi đã tìm thấy http://stackoverflow.com/questions/6344076/differences-between-distribute-distutils-and-setuptools. Từ những gì tôi đã đọc gần, có vẻ như gợi ý đang hướng tới disutils2. Bạn vẫn khuyên dùng setuptools? –