Как добавить каталог lib в sys.path при установке с пользовательским префиксом - PullRequest
2 голосов
/ 27 декабря 2011

Я пришел из C фона с Autotools (./configure, make, make install), но недавно начал использовать Python. С помощью Autotools я могу установить программу более или менее в любом месте системы, выполнив команду ./configure --prefix=/foo/bar. Я обнаружил, что большинство программ на Python использует похожую систему, основанную на distutils, обычно в файле с именем setup.py. Однако я заметил, что если я установлю проект в нестандартный каталог, например, выполнив команду python setup.py install --prefix /foo/bar, сценарий в /foo/bar/bin не сможет получить пакеты, которые установлены в /foo/bar/lib/pythonx.y/site-packages.

Я предполагаю, что каким-то образом мне нужно добавить этот каталог в sys.path при выполнении скрипта. Как мне сделать это стабильным кроссплатформенным образом? Или я должен сделать что-то еще?

Ответы [ 2 ]

1 голос
/ 27 декабря 2011

Если ваш пользовательский каталог установки - «foo», ваш python-корень - «bar», а пакетный корень - «lib», вы можете добавить это в ваш скрипт:

import sys
from os.path import join
foo = "foo"
bar = "bar"
lib = "lib"
newbase = join(foo, bar, lib)
sys.path.append(newbase)

в вашем примере:

foo ='foo'
bar = 'bar'
lib = '/lib/pythonx.y/site-packages'
0 голосов
/ 27 декабря 2011

Другим распространенным инструментом является использование virtualenv для создания другого Python-репозитория, который не является общесистемным, и установки вашего пакета внутри него.

>> pip install virtualenv
>> virtualenv --distutils test_env
>> source ./test_env/bin/activate
>> cd <your package>
>> python setup.py install
...