Настройка места установки для Django (или любого модуля Python) - PullRequest
0 голосов
/ 29 октября 2009

Я бы хотел установить Django в другое место, я прочитал документацию distutils и предлагает мне сделать что-то подобное для установки в моем домашнем каталоге при запуске из распакованного архива Django).

> python setup.py install --home=~/code/packages/install --install-purelib=modules --install-platlib=modules --install-scripts=scripts --install-data=data 

Однако каждый раз, когда я запускаю это, кажется, что он не объединяет домашний путь с отдельными путями элементов, и поэтому я просто получаю

<code>modules/
scripts/
data/ 

В каталоге распакованного tar-шара. То есть кажется, что модули, скрипты и т. д. трактуются как просто относительные пути к локальному каталогу, а не по отношению к указанному параметру --home.

Я попытался установить рут с помощью --prefix и использовать файл setup.cfg, но ничего не работает. --prefix и и --home сами по себе без других переопределений работают, но при использовании вместе с --install-xxx не переопределяют.

Я, вероятно, делаю что-то глупое, или документация неверна, или это ошибка. Любая помощь очень благодарна.

Ответы [ 4 ]

2 голосов
/ 29 октября 2009

Я настоятельно рекомендую вам взглянуть на Virtualenv и Pip для создания в основном силосов пакетов Python.

Проект Pinax теперь использует его исключительно для объединения требований, которыми могут пользоваться другие люди, и становится все более и более стандартом де-факто в пространстве приложений многократного использования.

1 голос
/ 29 октября 2009

Хорошо, я посмотрел исходный код distutils, чтобы увидеть, что происходит - distutils.command.install выполняет все манипуляции с путями.

Оказывается, документация на самом деле неверна. Всякий раз, когда предоставляется опция стиля --install-xxxx, она полностью переопределяет любое значение, которое может быть получено из --home или --prefix - код not выполняет прямую конкатенацию путей.

Однако , то, что он делает, это подстановка переменных набора специальных переменных. Особенно меня интересует $base. Используя его в командной строке, вы можете определить переопределения, и distutils заменит все вхождения на то, что было указано для --home и т. Д. Но обратите внимание, что вы должны указывать свои имена файлов, чтобы BASH не пытался развернуть его как переменную среды.

Итак, командная строка, которая у меня была изначально, становится:

python setup.py install --home=/home/andre/code/packages/install --install-purelib='$base/modules' \
  --install-platlib='$base/modules' --install-scripts='$base/scripts' --install-data='$base/data'

Надеюсь, кто-то, кроме меня, найдет это полезным!

0 голосов
/ 29 октября 2009

Если вы просто хотите, чтобы он находился в вашем домашнем каталоге, его вообще не нужно устанавливать. Просто убедитесь, что каталог контейнера находится где-то на вашем пути python, и переместите сценарии в django / bin куда-нибудь в вашем основном PATH (или добавьте этот каталог в ваш путь).

0 голосов
/ 29 октября 2009

В качестве быстрой проверки я бы предложил заменить

~/code/packages/install

с

/full_path_to_your_user/code/packages/install

...