Я пытаюсь включить файлы данных в distutils для своего пакета, а затем ссылаться на них, используя относительные пути (следуя http://docs.python.org/distutils/setupscript.html#distutils-additional-files)
Моя структура каталога:
myproject/
mycode.py
data/
file1.dat
код в mycode.py
, который на самом деле является скриптом в пакете. Он зависит от доступа к data/file1.dat
, обратитесь к нему, используя этот относительный путь. В setup.py
у меня есть:
setup(
...
scripts = "myproject/mycode.py"
data_files = [('data', 'myproject/data/file1.dat')]
)
предположим, что пользователь сейчас использует:
python setup.py --prefix=/home/user/
Тогда mycode.py
появится где-то вроде /home/user/bin/
. Но ссылка на data/file1.dat
теперь не работает, так как скрипт живет в другом месте от данных.
Как я могу узнать из mycode.py
абсолютный путь к myproject/data/file1.dat
, чтобы я мог правильно ссылаться на него в зависимости от того, где пользователь установил пакет?
РЕДАКТИРОВАТЬ
Когда я устанавливаю это с помощью prefix=/home/user/
, я получаю data/file1.dat
, созданный в /home/user/
, что именно то, что я хочу, единственная недостающая часть - это как получить абсолютный путь к этому файлу программно, учитывая только относительный путь и не зная, где пользователь установил пакет. Когда я пытаюсь использовать package_data
вместо data_files
, это не работает - я просто нигде не создаю data/file1.dat
, даже если я удаляю свой файл MANIFEST
.
Я прочитал все текущие обсуждения этой, по-видимому, очень распространенной проблемы. Однако все предлагаемые решения не относятся к случаю, описанному выше, где код, которому требуется доступ к data_files
, является сценарием, и его местоположение может измениться в зависимости от аргумента --prefix
на setup.py
. Единственный хак, который я могу придумать, чтобы решить эту проблему, - это добавить файл данных в scripts=
в setup()
, например:
setup(
...
scripts = ["myproject/mycode.py", "myproject/data/file1.data"]
)
это ужасный взлом, но это единственный способ, который я могу придумать, чтобы гарантировать, что file1.data
будет в том же месте, что и сценарии, определенные в scripts=
, поскольку я не могу найти какой-либо независимый от платформы и чувствительный к установке API для восстановления местоположения data_files
после пользователь запустил setup.py install
(возможно, с --prefix=
аргументами).
mycode
помогает ответить на заданный вопрос, который заключается в том, чтобы узнать местоположение файла данных? - person Piotr Dobrogost   schedule 20.10.2012