Установка пакета Python с помощью зернышка или easy_install от repos

Я создал класс Enum, который может извлекать значения И имена в O (1). Он также может генерировать массив объектов, содержащий все имена и значения.

function Enum(obj) {
    // Names must be unique, Values do not.
    // Putting same values for different Names is risky for this implementation

    this._reserved = {
        _namesObj: {},
        _objArr: [],
        _namesArr: [],
        _valuesArr: [],
        _selectOptionsHTML: ""
    };

    for (k in obj) {
        if (obj.hasOwnProperty(k)) {
            this[k] = obj[k];
            this._reserved._namesObj[obj[k]] = k;
        }
    }
}
(function () {
    this.GetName = function (val) {
        if (typeof this._reserved._namesObj[val] === "undefined")
            return null;
        return this._reserved._namesObj[val];
    };

    this.GetValue = function (name) {
        if (typeof this[name] === "undefined")
            return null;
        return this[name];
    };

    this.GetObjArr = function () {
        if (this._reserved._objArr.length == 0) {
            var arr = [];
            for (k in this) {
                if (this.hasOwnProperty(k))
                    if (k != "_reserved")
                        arr.push({
                            Name: k,
                            Value: this[k]
                        });
            }
            this._reserved._objArr = arr;
        }
        return this._reserved._objArr;
    };

    this.GetNamesArr = function () {
        if (this._reserved._namesArr.length == 0) {
            var arr = [];
            for (k in this) {
                if (this.hasOwnProperty(k))
                    if (k != "_reserved")
                        arr.push(k);
            }
            this._reserved._namesArr = arr;
        }
        return this._reserved._namesArr;
    };

    this.GetValuesArr = function () {
        if (this._reserved._valuesArr.length == 0) {
            var arr = [];
            for (k in this) {
                if (this.hasOwnProperty(k))
                    if (k != "_reserved")
                        arr.push(this[k]);
            }
            this._reserved._valuesArr = arr;
        }
        return this._reserved._valuesArr;
    };

    this.GetSelectOptionsHTML = function () {
        if (this._reserved._selectOptionsHTML.length == 0) {
            var html = "";
            for (k in this) {
                if (this.hasOwnProperty(k))
                    if (k != "_reserved")
                        html += "<option value='" + this[k] + "'>" + k + "</option>";
            }
            this._reserved._selectOptionsHTML = html;
        }
        return this._reserved._selectOptionsHTML;
    };
}).call(Enum.prototype);

Вы можете инициировать это так:

var enum1 = new Enum({
    item1: 0,
    item2: 1,
    item3: 2
});

Чтобы получить значение (например, перечисления в C #):

var val2 = enum1.item2;

Чтобы получить имя для значение (может быть неоднозначным при установке одного и того же значения для разных имен):

var name1 = enum1.GetName(0);  // "item1"

Чтобы получить массив с каждым именем & amp; значение в объекте:

var arr = enum1.GetObjArr();

Сгенерирует:

[{ Name: "item1", Value: 0}, { ... }, ... ]

Вы также можете легко получить html-параметры выбора:

var html = enum1.GetSelectOptionsHTML();

Что содержит:

"<option value='0'>item1</option>..."
14
задан Lakshman Prasad 23 June 2009 в 17:07
поделиться

4 ответа

Используя pip , это довольно просто. Например:

pip install -e hg+http://bitbucket.org/andrewgodwin/south/#egg=South

Pip автоматически клонирует репозиторий с исходным кодом и запускает "setup.py develop", чтобы вы могли установить его в свою среду (которая, надеюсь, является virtualenv ). Поддерживаются Git, Subversion, Bazaar и Mercurial.

Вы также можете затем запустить «pip freeze», и он выведет список ваших установленных пакетов с их точными версиями (включая, для разработки-установки, точную ревизию из VCS). Вы можете поместить это прямо в файл требований, а затем запустить

pip install -r requirements.txt

, чтобы установить тот же набор пакетов в тех же самых версиях.

26
ответ дан 1 December 2019 в 06:54
поделиться

Если вы загружаете или проверяете исходный дистрибутив пакета, то есть тот, в котором находится файл "setup.py", то если пакет основан на "setuptools" (который также power easy_install), вы можете перейти в этот каталог и сказать:

$ python setup.py develop

, и он создаст правильные символические ссылки в dist-пакетах, так что файлы .py в исходном дистрибутиве будут импортированы, а не копии, установленные отдельно (это то, что будет делать "setup.py install" - создавать отдельные копии, которые не изменяются немедленно, когда вы редактируете исходный код, чтобы попытаться изменить).

Как указывает другой ответ, вам следует попробовать прочитать "setuptools" "документация, чтобы узнать больше. "setup.py develop" - действительно полезная функция! Попробуйте использовать его в сочетании с virtualenv, и вы можете "setup.py development" безболезненно и без нарушения общесистемного Python с пакетами, которые вы разрабатываете только временно:

http://pypi.python.org/pypi/virtualenv
11
ответ дан 1 December 2019 в 06:54
поделиться

easy_install поддерживает загрузку определенных версий. Например:

easy_install python-dateutil==1.4.0

Будет установлена ​​v1.4, в то время как последняя версия 1.4.1 будет выбрана, если версия не указана.

Также имеется поддержка svn checkouts, но ее использование не дает вам особых преимуществ от ваша ручная версия. См. Руководство для получения дополнительной информации выше.

Возможность переключения на определенные ветки редко бывает полезной, если вы не разрабатываете рассматриваемые пакеты, и тогда обычно не рекомендуется устанавливать их в пакеты сайтов.

4
ответ дан 1 December 2019 в 06:54
поделиться

easy_install также принимает URL-адрес для исходного дерева. Работает, по крайней мере, когда исходники находятся в Subversion.

0
ответ дан 1 December 2019 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: