2012-04-16 1 views
7

Мне нравится определять миф за пакетами пространства имен Python на setuptools, и вот что я проверил.Почему я не могу получить точно результат для * pip install * вручную * python setup.py install *?

  • Сделать виртуальную среду по virtualenv.
  • Найти пакет с заменой на PyPI.
  • Установите этот пакет на pip install.
  • Проверьте установленную иерархию файлов.

Пакет я играл в zope.interface и она работала хорошо со следующей иерархии файлов на моем virtualenv:

~virenv/.../site-packages/zope.interface-3.8.0-py2.6-nspkg.pth 
         /zope.interface-3.8.0-py2.6.egg-info/ 
         /zope/ 
           /interface/ 
             /... 

Все выглядело хорошо, и я люблю, как zope.interface получил установленный как настоящий пакет с именами (в папке zope).

Затем я сделал еще одно испытание, и это вопрос, который я хотел бы попросить о вашей помощи. Я загрузил исходный файл zope.interface. Мне нравилось играть в нее снова

  • вручную Осуществите виртуальные окружения по virtualenv.
  • Untar the zope.interface где-то.
  • Установите пакет по python setup.py install.
  • Идите проверить, что произошло в сайт-пакеты.

В сайт-пакеты выглядит следующим образом:

~virenv/../site-packages/zope.interface-...egg/ 
               /zope/ 
                /__init__.py 
                /interface/ 
               /EGG-INFO/ 

Q. Почему я не могу получить именно результат к pip install вручную python setup.py install?

ответ

15

pip использует setup.py внутренне. Он просто передает дополнительную возможность. Для того, чтобы воспроизвести то, что pip делает, выполнить

python setup.py install --single-version-externally-managed 

Вы также можете запустить pip -vv, чтобы увидеть, какие именно команды выполняются.

+0

Чтобы сделать эту работу, кажется, мне нужно предоставить * - root * или * - record * then ~ Он выглядит мне нужно подготовить что-то вроде * ~ zope.interface-3.8.0-py2.6.egg-info/installed-files.txt * для * - record *. Я прав? – Drake

+1

Точная команда: 'python -c 'import setuptools; __file __ ='/path/to/setup.py '; execfile ('/path/to/setup.py ')" install --single-version-externally- управляемый --record /tmp/pip-NM9sBK-record/install-record.txt --install-headers/site-packages/path' – vartec

-8

Q. Почему я не могу получить точно результат для установки pp вручную вручную python setup.py install?

Потому что pip и setup.py - это две разные части программного обеспечения.

pip не рекламируется как предоставление идентичного поведения setup.py, а также наоборот.

Если вы хотите поведение pip, используйте pip; если вы хотите поведение setup.py, используйте setup.py.

+2

Wow! В самом деле? Никогда не думал об этом! – Drake

+0

все еще ищет возможное описание или даже решение этой проблемы. Мне нужна эта чистая иерархия файлов с помощью * pip *, но с * setup.py * способом. – Drake

+0

@DrakeGuan: Вы должны изменить название своего вопроса, чтобы отразить ваш последний комментарий. В чем разница между pip и setup.py - это не вопрос, похоже, вы действительно заинтересованы в чем-то более конкретном. –