Доступ к файлам данных до и после distutils / setuptools

StackOverflow https://stackoverflow.com/questions/1219367

  •  10-07-2019
  •  | 
  •  

Вопрос

Я делаю независимое от платформы приложение PyQt. Я намерен использовать для записи файлов setup.py с помощью setuptools. До сих пор мне удалось обнаружить платформу, например, загрузить определенные параметры для setup () в зависимости от платформы, чтобы использовать py2exe в Windows ... и т. д.

Однако, с моим приложением я распространяю некоторые темы, HTML и изображения, мне нужно загрузить эти изображения в приложение во время выполнения. Пока они хранятся в каталоге themes / приложения.

Я читал документацию по setuptools и distutils и выяснил, что если бы я дал setup () опции data_files со всеми файлами в каталоге themes /, которые нужно установить в " share / MyApp / themes / " он будет установлен с префиксом / usr / или любым другим sys.prefix на платформе. Я предполагаю, что я найду файлы данных, используя nomatter os.path.join (sys.prefix, «share» »,« MyApp »,« themes »), на какой платформе я работаю, верно?

Однако я хочу иметь возможность доступа к файлам данных также во время разработки, где они находятся в каталоге themes / относительно источника приложения. Как мне это сделать? Есть ли какой-нибудь умный способ выяснить, установлено ли приложение? Или утилита, которая отображает файлы данных независимо от того, где они находятся в данный момент?

Я бы очень не хотел добавлять всевозможные уродливые хаки, чтобы посмотреть, есть ли темы, относящиеся к источнику, или в sys.prefix / share ... и т.д ... Как я могу найти там файлы данных во время разработки? а после установки на произвольную платформу?

Это было полезно?

Решение

Я использовал служебный метод с именем data_file:

def data_file(fname):
    """Return the path to a data file of ours."""
    return os.path.join(os.path.split(__file__)[0], fname)

Я помещаю это в файл init .py в моем проекте, а затем вызываю его из любого места в моем пакете, чтобы получить файл, относящийся к пакету.

Setuptools предлагает аналогичную функцию, но для этого не нужны setuptools.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top