доступ к файлам после установки setup.py - PullRequest
0 голосов
/ 07 июня 2010

Я занимаюсь разработкой приложения на python, и у меня есть вопрос, касающийся его кодирования, чтобы оно продолжало работать после того, как пользователь установил его на своем компьютере с помощью setup.py install или аналогичного.

В одном из моих файлов я использую следующее:

file = "TestParser/View/MainWindow.ui"
cwd = os.getcwd()
argv_path = os.path.dirname(sys.argv[0])
file_path = os.path.join(cwd, argv_path, file)

, чтобы получить путь к MainWindow.ui, когда я знаю только путь относительно расположения основного скрипта. Это работает независимо от того, откуда я вызываю основной скрипт.

Проблема в том, что после того, как пользователь установит приложение на своем компьютере, относительный путь будет другим, поэтому это не сработает. Я мог бы использовать __file__, но согласно это , py2exe не имеет __file__.

Существует ли стандартный способ достижения этого? Или лучше?

EDIT:

Должен ли я беспокоиться о py2exe и просто использовать __file__? У меня нет непосредственных планов использовать py2exe, но я надеялся изучить правильный способ доступа к файлам в этом контексте.

1 Ответ

1 голос
/ 16 июня 2010

С setup.py никогда не бывает простого ответа, который подходит для всех сценариев.Setup.py - это огромный PITA для работы с различными процедурами установки (например, «setup.py install», py2exe, py2app).

Например, в моем приложении у меня есть этот код для поиска необходимых файловприложением:

def getHome():
  if hasattr(sys, "frozen"):
    if sys.platform == "darwin": # OS X
      return os.path.join(os.path.dirname(os.path.dirname(sys.executable)), "Resources")
    return os.path.dirname(sys.executable)
  else:
    return os.path.dirname(__file__)

«заморожено» устанавливается для приложений, созданных с помощью py2exe и py2app.

Поэтому, чтобы ответить на ваш вопрос, используйте __file__ и не беспокойтесь о py2exe.Если вам когда-нибудь понадобится использовать py2exe, вам, вероятно, все равно придется создать специальный кейс.

...