pkg_resources не извлекает файлы из яиц Python
Я создал яйцо питона, запустив python setup.py bdist_egg
из этой папки:
SensorDisplay/
--- sensor_display/
----- __init__.py
----- can.py
----- sensor_display.py
----- data/
--------- sensor_param.txt
--- setup.py
в файле setup.py
, Я имею:
package_data = {'' : ['*.txt']},
scripts = ['sensor_display/sensor_display.py','sensor_display/can.py']
и в файле sensor_display.py
:
PARAM_FILE = "data/sensor_display.txt"
param_file = pkg_resources.resource_filename("sensor_display", PARAM_FILE)
f = open(param_file,"r")
Я получаю тогда яйцо файл SensorDisplay-0.1-py2.7.egg
в папке SensorDisplay\dist\
, Тем не менее, когда я устанавливаю яйцо с easy_install и запускаю файл C:\Python27\Scripts\sensor_display.py
Я получаю следующую ошибку:
IOError: [Errno 2] No such file or directory: 'C:\\Python27\\lib\\site-packages\
\sensordisplay-0.1-py2.7.egg\\EGG-INFO\\scripts\\data\\sensor_param.txt'
Похоже функция resource_filename
не извлекает файл egg, потому что возвращаемое имя файла рассматривает файл egg как каталог, которым он не является.
2 ответа
Решение
Я нашел проблему, я заменил
PARAM_FILE = "data/sensor_display.txt"
param_file = pkg_resources.resource_filename("sensor_display", PARAM_FILE)
с
PARAM_FILE = "sensor_display/data/sensor_display.txt"
param_file = pkg_resources.resource_filename(pkg_resources.Requirement.parse("SensorDisplay"), PARAM_FILE)
смотрите также pkg_resources.resource_filename не извлекает файлы
Яичный файл - это zip-архив. Вы можете посмотреть содержимое, используя команду unzip.