2014-02-10 3 views
1

Я пользуюсь локальным pypi server. Я могу установить пакеты с этого сервера, указав его с опцией -i команды pip или установив переменную среды PIP_INDEX_URL. Когда я устанавливаю пакет с предварительными условиями, setup.py исторически чествовал переменную среды PIP_INDEX_URL, вытягивая дополнительные пакеты с моего локального сервера.setup.py not honoring PIP_INDEX_URL

Однако на нескольких системах, которые были недавно установлены, он ведет себя по-другому. Запуск, например, python setup.py develop завершается с ошибкой, поскольку он пытается установить пакеты предварительных условий с pypi.python.org.

Я обновил все соответствующие пакеты Python (python, distribute, virtualenv, pip и т.д ...) на всех системах, я проверяю и продолжать видеть это несоответствие. В моей «оригинальной» системе setup.py загружает предварительные требования с сервера pypi, указанного в моей переменной PIP_INDEX_URL. В более новых системах я не могу поверить в эту переменную.

Что мне не хватает?

+0

Похоже, на это частично ответил http://stackoverflow.com/questions/3472430/how-can-i-make-setuptools-install-a-package-thats-not-on-pypi. Он не объясняет, почему переменная окружения непоследовательно соблюдается, но она говорит мне, как решить мою проблему, указав dependency_links. – zenzic

+1

И я наконец нашел преступника. На старом сервере у меня был файл '~/.pydistutils', который указывал easy_install на использование моего pypi-сервера. Как только я создал этот файл на новых серверах, мои развертывания снова работали. Он все еще не использует переменную PIP_INDEX_URL, но это дает мне возможность обойти это. – zenzic

ответ

1

Создать setup.cfg в той же папке, что и setup.py с следующим содержанием:

[easy_install] 
allow_hosts = *.myintranet.example.com 

От: http://pythonhosted.org/setuptools/easy_install.html#restricting-downloads-with-allow-hosts

Вы можете использовать опцию --allow-hosts (-H), чтобы ограничить то, что домены EasyInstall будут искать ссылки и загрузки.

--allow-hosts=None предотвращает загрузку в целом.


+0

Спасибо за информацию. Я попробую. Я все еще не понимаю, почему я вижу другое поведение между системами, использующими одно и то же программное обеспечение. – zenzic

+0

@zenzic, если вы используете 'python setup.py develop', тогда [' distutils'] (http://docs.python.org/2/library/distutils.html) позаботится об установке. Для информации backgroud есть статья, в которой суммируется (извините) состояние упаковки python: http: //lucumr.pocoo.org/2012/6/22/ненависть-ненависть-ненависть-везде/ – iljau

+0

это то, чего я ожидал, но не видел. Я все еще избиваю голову против этой проблемы и не нахожу приемлемого решения. Дело в том, что 'python setup.py develop' использует easy_install для установки зависимостей, указанных в setup.py (' install_requires'). easy_install игнорирует переменную среды PIP_INDEX_URL. Я не хочу жестко указывать индексный сервер в setup.py или setup.cfg, я хочу, чтобы он использовал тот, который указан в среде. Есть ли лучший способ сделать это? – zenzic

1

Я столкнулся с той же проблемой. В основном, setup.py использует setuptools, который использует easy_install, а не pip. Таким образом, он игнорирует любые заданные переменные среды .

Чтобы использовать тот же эффект, используйте python setup.py develop. Вы можете запустить pip (из верхней части упаковки) pip install -e ..

Смежные вопросы