Я пытаюсь включить файлы данных в distutils для своего пакета, а затем ссылаюсь на них с использованием относительных путей (следуя http://docs.python.org/distutils/setupscript.html#distutils-additional-files)
Моя структура:
myproject/
mycode.py
data/
file1.dat
код в mycode.py
, который на самом деле является script в пакете. Он полагается на доступ к 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
теперь сломана, так как script живет в другом месте от данных.
Как узнать, от mycode.py
, абсолютный путь к myproject/data/file1.dat
, поэтому я могу правильно обращаться к нему в зависимости от того, где пользователь установил пакет?
ИЗМЕНИТЬ
Когда я устанавливаю это с помощью prefix=/home/user/
, я получаю data/file1.dat
, созданный в /home/user/
, который является именно тем, что я хочу, единственная недостающая часть - это то, как получить абсолютный путь к этому файлу программно, учитывая только относительный путь и не зная где пользователь установил пакет. Когда я пытаюсь использовать package_data
вместо data_files
, он не работает - я просто не получаю data/file1.dat
, созданный где угодно, даже если я удалю файл MANIFEST
.
Я прочитал все текущие обсуждения этой, по-видимому, очень распространенной проблемы. Однако все предлагаемые решения не имеют отношения к случаю, когда у меня есть выше, , где код, которому необходимо получить доступ к data_files
, является script, и его местоположение может измениться в зависимости от аргумента --prefix
до setup.py
. Единственное, что я могу решить, это добавить файл данных в scripts=
в setup()
, как в:
setup(
...
scripts = ["myproject/mycode.py", "myproject/data/file1.data"]
)
Это ужасный взлом, но это единственный способ, которым я могу думать, чтобы file1.data
был в том же месте, что и скрипты, определенные в scripts=
, так как я не могу найти какой-либо независимый от платформы и чувствительный к установке API для восстановления местоположения data_files
после запуска пользователем setup.py install
(возможно, с аргументами --prefix=
).