Я пытаюсь включить файлы данных в 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
, чтобы я мог обращаться к нему должным образом в зависимости от того, где пользователь установил пакет?
EDIT
Когда я устанавливаю это с 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=
args).