как установить вихрь с conda [дубликат]

Это немного похоже на ответ fab, но не совсем то же самое.

Контракт singleton не требует, чтобы мы могли вызвать конструктор несколько раз. Поскольку одноэлемент должен создаваться один раз и один раз, разве это не должно быть создано только один раз? «Spoofing» конструктор, возможно, ухудшает удобочитаемость.

Итак, мое предложение таково:

class Elvis():
    def __init__(self):
        if hasattr(self.__class__, 'instance'):
            raise Exception()
        self.__class__.instance = self
        # initialisation code...

    @staticmethod
    def the():
        if hasattr(Elvis, 'instance'):
            return Elvis.instance
        return Elvis()

Это не исключает использования конструктора или поля instance код пользователя:

if Elvis() is King.instance:

... если вы точно знаете, что Elvis еще не создано и что King имеет.

Но он рекомендует пользователям использовать универсальный метод the:

Elvis.the().leave(Building.the())

Чтобы сделать это, вы также можете переопределить __delattr__(), чтобы поднять исключение, если попытка удалить instance , и переопределить __del__(), чтобы он вызывал исключение (если мы не знаем, что программа заканчивается ...)

Дальнейшие улучшения


Спасибо тем, кто помог с комментариями и изменениями, из которых больше приветствуются. Хотя я использую Jython, это должно работать в более общем плане и быть потокобезопасным.

try:
    # This is jython-specific
    from synchronize import make_synchronized
except ImportError:
    # This should work across different python implementations
    def make_synchronized(func):
        import threading
        func.__lock__ = threading.Lock()

        def synced_func(*args, **kws):
            with func.__lock__:
                return func(*args, **kws)

        return synced_func

class Elvis(object): # NB must be subclass of object to use __new__
    instance = None

    @classmethod
    @make_synchronized
    def __new__(cls, *args, **kwargs):
        if cls.instance is not None:
            raise Exception()
        cls.instance = object.__new__(cls, *args, **kwargs)
        return cls.instance

    def __init__(self):
        pass
        # initialisation code...

    @classmethod
    @make_synchronized
    def the(cls):
        if cls.instance is not None:
            return cls.instance
        return cls()

Оповещения:

  1. Если вы не подклассы объекта python2.x вы получите класс старого стиля, который не использует __new__
  2. . При декорировании __new__ вы должны украсить с помощью @classmethod, или __new__ будет методом несвязанного экземпляра
  3. Возможно, это возможно улучшить с помощью метакласса, поскольку это позволит вам сделать свойство the класса, возможно, переименовать его в instance
36
задан Frank 10 January 2016 в 14:25
поделиться

9 ответов

Теперь я нашел документацию:

Это документация, которая объясняет, как создавать пакеты R, доступные только в репозитории CRAN: https://www.continuum.io/ content / conda-data-science

Перейдите в раздел «Построение пакета conda R».

(Подсказка: если пакет R доступен под анакондой .org используйте этот ресурс. См. здесь: https://www.continuum.io/blog/developer/jupyter-and-conda-r )

alistaire - это еще одна возможность добавить R-пакеты:

Если вы устанавливаете пакеты изнутри R через регулярные install.packages (из зеркал CRAN) или devtools::install_github (из GitHub) они отлично работают. @alistaire

Как это сделать: откройте свою независимую установку R, затем выполните следующую команду:

install.packages("png", "/home/user/anaconda3/lib/R/library")

, чтобы добавить новый пакет в правильную библиотеку R, используемую Jupyter , иначе пакет будет установлен в /home/user/R/i686-pc-linux-gnu-library/3.2/png/libs, упомянутом в .libPaths () .

24
ответ дан Ömer An 21 August 2018 в 17:29
поделиться
  • 1
    Вы также можете использовать .libPaths для установки пути, по которому вы хотите установить пакеты, если вы передадите ему аргумент; см. ?.libPaths. – alistaire 15 April 2016 в 18:06
  • 2
    Вы также можете запустить install.packages в ячейке Jupyter: install.packages('package name', 'installation path (ending with Anaconda3\R\library\learningr)', repo='repo link. Check https://cran.r-project.org/mirrors.html'). repo существует, поскольку репо необходимо указывать при установке пакетов в Jupyter, иначе он выдает ошибку trying to use CRAN without setting a mirror. – seismatica 6 December 2017 в 12:28
  • 3
    Приведенные ссылки мертвы – user3375672 29 July 2018 в 06:55

Добавьте сюда, чтобы другие новички, уже работающие с ноутбуками Jupyter с Python и заинтересованные в использовании его с R: дополнительные пакеты, доступные для Anaconda, можно установить через терминал, используя ту же команду, что и для установки необходимых пакетов.

Установить r-essentials

conda install -c r r-essentials

Установить микрообъект (инфраструктура для точного измерения и сравнения времени выполнения R-выражений)

conda install -c r r-microbenchmark
0
ответ дан A. Beal 21 August 2018 в 17:29
поделиться

Я попытался установить R-пакеты ggplot2, tidyverse и т. д., используя стандартные репозитории CRAN в командной строке, и столкнулся с несколькими проблемами и проблемами.

Все, от неиспользуемых файлов «init.tcl» до строки из 15 символов ошибки. Я смог подробно ознакомиться с сайтом Conda и WWW.Anaconda.org. Это установленные R-пакеты в архитектуре каталога Anaconda, которые исполнялись в R в терминальной среде RStudio и R в Jupyter Notebooks Anaconda Navigator.

например: conda install -c r r-tidyverse Очень легко и работает в первый раз. [На Kubuntu 17.04 с Anaconda Navigator 1.6.2; R версии 3.3.2 (2016-10-31)]

-1
ответ дан Andrew Elliott 21 August 2018 в 17:29
поделиться

Я нашел легкое обходное решение. Я полагаю, что у вас есть RStudio IDE для вас. Странно использовать RStudio для этого, но я пробовал прямо с R в моем терминале, и это не сработало. Итак, в консоли RStudio просто добавьте путь к вашему каталогу anaconda (в OSX, '/ Users / yourusernamehere / anaconda / lib / R / library')

Итак, например,

install.packages('package','/Users/yourusernamehere/anaconda/lib/R/library')

Мне стыдно выкладывать такой нелюдимый ответ, но это единственный, который работал для меня.

9
ответ дан Deninhos 21 August 2018 в 17:29
поделиться
  • 1
    Я удивлен, что это решение сработало для меня, но все было так просто. – captain_M 22 June 2017 в 16:30
  • 2
    Я попробовал это, и я все еще получаю ненулевую ошибку статуса выхода. – Michael Perdue 11 November 2017 в 23:52

Чтобы установить другие R-пакеты на Jupyter за R-essentials

install.packages('readr', repos='http://cran.us.r-project.org')

Одна из проблем заключается в том, что конкретным репозиторием является US.R-Project (как показано ниже). Я пробовал другие, и это не сработало.

N.B. Замените readr любым желаемым именем пакета для установки.

17
ответ дан Morales Batovski 21 August 2018 в 17:29
поделиться

Установите rpy2 с помощью conda и добавьте следующую строку в ваш ноутбук Jupyter.

%load_ext rpy2.ipython

В следующих фрагментах вы можете просто запустить любой r-код, указав% R

Ниже мой любимый метод установки и / или загрузки r package

%R if (!require("pacman")) install.packages("pacman")
%R pacman::p_load(dplyr, data.table, package3, package4)

аргумент p_load будет устанавливать + загружать пакет, если он не находится в вашем lib else, он просто загрузит его.

1
ответ дан Pranav Pandya 21 August 2018 в 17:29
поделиться

Кто-то предложил не очень элегантный способ, но то, что элегантно, пока оно работает.

install.packages ('package', '/ Users / yourusernamehere / anaconda / lib / R / library ')

Я провел почти все утро, пытаясь найти ответ на эту проблему. Я смог установить библиотеки на RStudio, но не на Jupyter Notebook (у них разные версии R). Это решение «почти» работало, просто я обнаружил, что Jupyter Notebook пытается установить его в другой каталог, и он будет сообщите, какой каталог. Поэтому я только изменил это, и это сработало как прелесть ... благодаря Dninhos

1
ответ дан rojour 21 August 2018 в 17:29
поделиться

У меня возникла проблема при попытке установить пакет из github, используя install_github("user/package") в conda с r-essentials. Ошибки были множественными и не описательными.

Удалось решить проблему, используя следующие этапы:

  • загрузить и распаковать пакет локально
  • активировать правильную конду (если требуется)
  • запустите R из командной строки
  • library(devtools)
  • install('/path/to/unzipped-package')
  • Не удалось выполнить команду из-за отсутствия запросов , но теперь я знаю, чего не хватает!
  • запустите install.packages('missing-package', repos='http://cran.us.r-project.org') для всех зависимостей
  • снова запустите install('/path/to/unzipped-package'). Теперь он должен работать!
1
ответ дан volodymyr 21 August 2018 в 17:29
поделиться

Вот конда-ориентированный ответ. Он основывается на ответе Фрэнка и веб-сайте континуума: https://www.continuum.io/content/conda-data-science с чуть более подробной информацией.

Некоторые пакеты не доступные в r-essentials, по-прежнему доступны на каналах conda, в этом случае это просто:

conda config --add channels r
conda install r-readxl

Если вам нужно построить пакет и установить с помощью conda:

conda skeleton cran r-xgboost
conda build r-xgboost
conda install --use-local r-xgboost

, что последняя строка отсутствует на веб-сайте континуума, поскольку они предполагают, что она сначала публикуется в репозитории anaconda. Без него ничего не будет помещено в каталог envs /, и пакет не будет доступен для командной строки R или Jupyter.

На маке мне было очень важно установить компилятор Clang для сборки пакетов:

conda install clangxx_oxs-64
4
ответ дан Ziggy Eunicien 21 August 2018 в 17:29
поделиться
  • 1
    Для меня этот ответ работал только для некоторых пакетов. Для других пакетов я получил ошибку на втором шаге conda build r-xgboost. & quot; make: / home / user / anaconda3 / conda-bld / r-matrixstats_1516727877269 / _h_env_placehold_pl / bin / x86_64-conda_cos6-linux-gnu-cc: команда не найдена make: *** [/ home / user / anaconda3 / conda -bld / r-matrixstats_1516727877269 / _h_env_placehold_pl / lib / R / etc / Makeconf: 160: 000.init.o] Ошибка 127 ОШИБКА: сбой компиляции для пакета «matrixStats» & quot; – burton030 24 January 2018 в 09:31
  • 2
    @ burton030 Кажется, у меня такая же ошибка. Вы нашли решение? – ytu 25 February 2018 в 06:47
  • 3
    Эй, этот ответ сработал для меня, но я не могу установить эти пакеты в r-окружения с помощью mro-base. Вместо этого он должен быть r-базой. Вы знаете какой-либо способ создания пакетов для mro-base или для этого требуется что-то вроде conda skeleton mran r-mice, которого в настоящее время не существует? – brimborium 12 March 2018 в 18:54
Другие вопросы по тегам:

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