dist-packages и sys.path - PullRequest
       27

dist-packages и sys.path

3 голосов
/ 20 марта 2012

У меня есть некоторый код внутри моего приложения, который ищет некоторые файлы в каталогах моего приложения. Я работаю с AptanaStudio и вижу, что мой код работает нормально, но когда я создаю пакет debian и устанавливаю его на другом компьютере, поиск не выполняется, потому что sys.path выглядит как другой список.

Из выполнения Aptana sys.path включает путь к исполняемому каталогу (/ mysvncopy / myapplication), и я считаю, что мой код находит файлы таким образом.

При установке приложения оставьте эти файлы в / usr / share / pyshared / myapplication , и я подумал, что этот каталог автоматически доступен в отношении / usr / local / lib / python2.6 / dist- пакеты в sys.path , но что-то не так, / usr / local / lib / python2.6 / dist-packages IS в sys.path конечно, но приложение не находит ничего внутри / usr / share / pyshared / myapplication .

Как я могу убедиться в том, что приложение знает, что оно ищет внутри / usr / share / pyshared / myapplication и эквивалентных в Windows и Mac?

Если я включу в свой код:

<sys.path.append('/usr/share/pyshared/myapplication')

поиск выполнен успешно, но этот код S.O. зависимый.

При необходимости я могу вставить setup.py.

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 июля 2016

Если вы создаете пакет debian, содержащий приложение, написанное на python, вам, вероятно, следует упаковать его с помощью pex (https://github.com/pantsbuild/pex) или cx_Freeze (http://cx -freeze.sourceforge.net / * 1005)*) во-первых. Таким образом, ваше приложение всегда выполняется:)

0 голосов
/ 10 августа 2012

Я не знаком с использованием setup.py, так что это может быть бесполезно, но ..

Если вы импортируете sys и os в верхнюю часть вашего установщика, вы можете сделать что-то вроде этого:

if sys.getwindowsversion():
    <install to Windows dir>
elif os.system('uname -a'):
    ostest = os.popen('uname -a').split(' ')
    if str('Linux') in ostest:
        <install to Linux dir>

и так далее. У меня нет Mac, поэтому я не знаю, возвращает ли uname -a что-либо в одном, однако, если он есть, вы можете проанализировать ostest для чего-то вроде OSX (который, скорее всего, будет где-то там). И иметь отдельный файл или набор файлов для каждой ОС. Или даже проще, после их установки в исходных файлах, например, есть строка с именем «OSREPLACE», а затем используйте что-то вроде этого кода, продолжая описанную выше часть, после нахождения os и присвоения ей переменной:

...    
if os == 'linux':
    NEWSTRING = 'linuxpaths'
elif os == 'mac':
    NEWSTRING = 'macpaths'
elif os == 'windows':
    NEWSTRING = 'windowspaths'

for file in files:
        with open(str(file), 'r') as f:
            data = f.read()
            data = data.replace('OSREPLACE', 'NEWSTRING')
        with open(str(file), 'w') as f:
            f.write(data)       
...