Как заставить VirtualEnv использовать пользовательскую версию setuptools? - PullRequest
3 голосов
/ 11 мая 2011

Крупная корпорация, в которой я работаю, использует собственную версию Setuptools. Этот частный раздел setuptools предназначен для решения определенных проблем с сетью и безопасностью, характерных для нашей организации. Суть в том, что ни стандартные Setuptools, ни Distribute не будут работать так, как ожидается в нашей среде.

Я хотел бы начать использовать превосходный инструмент Ian Bicking VirtualEnv в системах, особенно в наших тестовых системах, где нам нужно иметь возможность устанавливать большое количество изолированных областей для тестового кода - например, в нашей среде непрерывной интеграции.

К сожалению, каждый раз, когда я пытаюсь создать новую виртуальную среду, инструмент virtualenv пытается получить и установить последнюю официальную версию Setuptools. Это не удастся по вышеуказанной причине, а также потому, что корпоративный брандмауэр заблокирует действие.

Вместо установки официальной версии:

setuptools-0.6c11-py2.4.egg

Я бы хотел установить нашу индивидуальную версию, которая может называться примерно так:

setuptools-foo-0.6c11-py2.4.egg

Это яйцо всегда можно найти в глобальных пакетах сайта системы. Я также могу гарантировать, что он присутствует на всех наших корпоративных серверах яиц.

Можете ли вы помочь мне заставить моего virtualenv использовать мои настроенные setuptools вместо обычной версии setuptools.

Ответы [ 3 ]

2 голосов
/ 11 мая 2011

Имя жестко закодировано в virtualenv.py. Вы должны либо пропатчить virtualenv.py, либо назовите свой исправленный файл setuptools egg 'setuptools-0.6c11-py2.4.egg'

1 голос
/ 11 мая 2011

Я занялся написанием своих собственных скриптов-обёрток, которые импортируют virtualenv.Основная причина в том, что я использую dpkgs для установки большинства своих зависимостей, включая distribute, поэтому я предпочитаю избегать загрузки дополнительных копий при создании новой среды - это дает преимущество, что она работает намного быстрее.* Вот базовая оболочка, с которой вы можете начать.Я добавил комментарий, в котором вы можете вставить какой-нибудь код в символическую ссылку / скопировать ваш код пользовательской настройки в virtualenv:

import os, subprocess, sys, virtualenv

# virtualenv changed its internal api slightly after 1.5. 
NEW_API = (1, 5)

def get_version(version):
    return tuple([int(v) for v in version.split('.')])

def main():
    # set the logging level here
    level = virtualenv.Logger.level_for_integer(0)
    logger = virtualenv.Logger([(level, sys.stdout)])
    virtualenv.logger = logger

    # insert your command-line parsing code here, if needed
    root = sys.argv[1]

    home, lib, inc, bin = virtualenv.path_locations(root)
    result = virtualenv.install_python(home, lib, inc, bin,
            site_packages=True, clear=False)
    pyexec = os.path.abspath(result)
    version = get_version(virtualenv.virtualenv_version)
    if version < NEW_API:
        virtualenv.install_distutils(lib, home)
    else:
        virtualenv.install_distutils(home)
    virtualenv.install_activate(home, bin)

    # insert whatever post-virtualenv-setup code you need here 

if __name__ == '__main__':
    main()

Использование:

% python wrapper.py [path]
0 голосов
/ 02 января 2014

Есть опция --extra-search-dir, которая позволяет определить локальный каталог, содержащий нужную версию setuptools.Это объясняется в документах .

...