Как вы используете virtualenv для использования версии python, которую она не установила? [Дубликат]

Невозможность связывания с соответствующими библиотеками / объектными файлами или компиляция файлов реализации

Обычно каждая единица перевода генерирует объектный файл, содержащий определения символов, определенных в этой единицы перевода. Чтобы использовать эти символы, вам необходимо связать эти объектные файлы.

В разделе gcc вы должны указать все объектные файлы, которые должны быть связаны вместе в командной строке, или скомпилировать файлы реализации вместе.

g++ -o test objectFile1.o objectFile2.o -lLibraryName

Здесь libraryName - это просто имя библиотеки, без добавления к платформе. Так, например, в файлах библиотеки Linux обычно называют libfoo.so, но вы должны писать только -lfoo. В Windows этот же файл можно назвать foo.lib, но вы будете использовать тот же аргумент. Возможно, вам придется добавить каталог, в котором эти файлы можно найти, используя -L‹directory›. Обязательно не записывайте пробел после -l или -L.

Для XCode: добавьте пути поиска заголовка пользователя -> добавьте путь поиска библиотеки -> перетащите фактическую ссылку библиотеки в

В MSVS файлы, добавленные в проект, автоматически связывают их объектные файлы, и будет создан файл lib (в общем использовании). Чтобы использовать символы в отдельном проекте, вам нужно будет добавить файлы lib в параметры проекта. Это делается в разделе Linker свойств проекта в Input -> Additional Dependencies. (путь к файлу lib должен быть добавлен в Linker -> General -> Additional Library Directories). При использовании сторонней библиотеки, которая предоставляется с файлом lib, отказ в этом обычно приводит к ошибке.

Также может случиться так, что вы забудете добавить файл в компиляцию, и в этом случае объектный файл не будет сгенерирован. В gcc вы должны добавить файлы в командную строку. В MSVS добавление файла в проект заставит его скомпилировать его автоматически (хотя файлы могут, вручную, быть отдельно исключены из сборки).

В программировании Windows контрольный знак, который вы не связывали необходимая библиотека состоит в том, что имя неразрешенного символа начинается с __imp_. Посмотрите имя функции в документации, и она должна сказать, какую библиотеку вам нужно использовать. Например, MSDN помещает информацию в поле внизу каждой функции в разделе «Библиотека».

136
задан Frankline 4 February 2014 в 13:03
поделиться

10 ответов

Несмотря на то, что вопрос конкретно описывает установку 2.6, я хотел бы добавить некоторые примечания к отличным ответам выше, если кто-то столкнется с этим. Для записи было мое дело, что я пытался установить 2.7 на ящик ubuntu 10.04.

Во-первых, моя мотивация к методам, описанным во всех ответах здесь, заключается в том, что установка Python из deadsnake's ppa's был полным сбоем. Поэтому создание локального Python - это путь.

Попытавшись, я подумал, что полагаться на стандартную установку pip (с sudo apt-get install pip) было бы достаточно. К сожалению, это неправильно. Оказалось, что я получаю все шорты от неприятных проблем и, в конечном итоге, не могу создать виртуальный.

Поэтому я настоятельно рекомендую установить pip локально с wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py && python get-pip.py --user. Этот вопрос, связанный с , дал мне этот намек.

Теперь, если это не работает, убедитесь, что libssl-dev для Ubuntu или openssl-dev для CentOS. Установите их с помощью apt-get или yum, а затем перестройте Python (нет необходимости удалять что-либо, если оно уже установлено, сделать это сверху). get-pip жалуется на это, вы можете проверить это, запустив import ssl в оболочке py.

Последнее, не забудьте объявить .local/bin и локальный питон для пути, проверьте с помощью which pip и which python.

240
ответ дан Community 26 August 2018 в 01:39
поделиться

Теперь, через несколько дней, самый простой способ найти более обновленную версию Python - установить его через conda в среду conda.


Установить conda (вам может понадобиться virtualenv для this)

pip install conda

Установка новой версии Python внутри среды conda

Я добавляю этот ответ здесь, потому что загрузка вручную не требуется. conda сделает это для вас.

Теперь создайте среду для требуемой версии Python. В этом примере я буду использовать 3.5.2, потому что это последняя версия в это время написания (август 2016).

conda create -n py35 python=3.5.2

Создает среду для конды для установки пакетов

< hr>

Чтобы активировать эту среду (я предполагаю, что linux в противном случае проверяет conda docs ):

source activate py35

Теперь установите то, что вам нужно либо через pip или conda в среде (conda имеет лучшую поддержку двоичного пакета).

conda install <package_name>
2
ответ дан Bryce Guinta 26 August 2018 в 01:39
поделиться

Прежде всего, спасибо DTing за отличный ответ.

Для тех, кто страдает отсутствием доступа GCC на совместном хостинге, перейдите на ActivePython вместо обычного питона, как упомянул Скотт Стаффорд. Вот команды для этого.

wget http://downloads.activestate.com/ActivePython/releases/2.7.13.2713/ActivePython-2.7.13.2713-linux-x86_64-glibc-2.3.6-401785.tar.gz

tar -zxvf ActivePython-2.7.13.2713-linux-x86_64-glibc-2.3.6-401785.tar.gz

cd ActivePython-2.7.13.2713-linux-x86_64-glibc-2.3.6-401785

./install.sh

Он спросит вас о пути к каталогу python. Введите

../../.localpython

Просто замените выше в качестве шага 1 в ответе DTing и следуйте шагу 2 после этого. Обратите внимание, что URL-адрес пакета ActivePython может измениться с новой версией. Вы всегда можете получить новый URL-адрес здесь: http://www.activestate.com/activepython/downloads

На основании URL-адреса вам нужно изменить имя команды tar и cd основанный на полученном файле.

0
ответ дан Dhrumil Bhankhar 26 August 2018 в 01:39
поделиться

Вы можете использовать pyenv.

Существует множество разных версий anaconda, jython, pypy и т. д. ...

https://github.com / yyuu / pyenv

Установка настолько же проста, как pyenv install 3.2.6

pyenv install --list
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4
  2.4.1
  2.4.2
  2.4.3
  2.4.4
  2.4.5
  2.4.6
  2.5
  2.5.1
  2.5.2
  2.5.3
  2.5.4
  2.5.5
  2.5.6
  2.6.6

...

2
ответ дан Ezhik 26 August 2018 в 01:39
поделиться

Я использую virtualenvwrapper и не хочу изменять $ PATH, вот как:

$ which python3
/usr/local/bin/python3

$ mkvirtualenv --python=/usr/local/bin/python3 env_name
4
ответ дан laike9m 26 August 2018 в 01:39
поделиться

Я не нашел подходящего ответа, поэтому здесь идет мой прием, который основывается на ответе @toszter, но не использует системный Python (и вы можете знать, что не всегда рекомендуется устанавливать setuptools и virtualenv на системном уровне, когда имея дело со многими конфигурациями Python):

#!/bin/sh

mkdir python_ve
cd python_ve

MYROOT=`pwd`
mkdir env pyenv dep

cd ${MYROOT}/dep
wget https://pypi.python.org/packages/source/s/setuptools/setuptools-15.2.tar.gz#md5=a9028a9794fc7ae02320d32e2d7e12ee
wget https://raw.github.com/pypa/virtualenv/master/virtualenv.py
wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tar.xz
xz -d Python-2.7.9.tar.xz

cd ${MYROOT}/pyenv
tar xf ../dep/Python-2.7.9.tar
cd Python-2.7.9
./configure --prefix=${MYROOT}/pyenv && make -j 4 && make install

cd ${MYROOT}/pyenv

tar xzf ../dep/setuptools-15.2.tar.gz

cd ${MYROOT}

pyenv/bin/python dep/virtualenv.py --no-setuptools --python=${MYROOT}/pyenv/bin/python --verbose env
env/bin/python pyenv/setuptools-15.2/setup.py install
env/bin/easy_install pip

echo "virtualenv in ${MYROOT}/env"

Трюк с проблемой взлома курицы-яйца заключается в том, чтобы сначала сделать virtualenv без setuptools, потому что он иначе не работает (пип не может быть найден). Может быть возможно установить pip / wheel напрямую, но как-то easy_install было первым, что мне пришло в голову. Кроме того, сценарий может быть улучшен путем разложения конкретных версий.

NB. Использование xz в скрипте.

0
ответ дан Roman Susi 26 August 2018 в 01:39
поделиться

Нет, но вы можете установить изолированную сборку Python (например, ActivePython ) в вашем каталоге $HOME.

Этот подход является самым быстрым и не требует вы сами компилируете Python.

(в качестве бонуса вы также можете использовать менеджер бинарных пакетов ActiveState

0
ответ дан Sridhar Ratnakumar 26 August 2018 в 01:39
поделиться

Предварительные требования:

  1. sudo easy_install virtualenv
  2. sudo pip install virtualenvwrapper

Установка virtualenv с Python2.6:

  1. Вы можете вручную загрузить, установить и установить другую версию Python на /usr/local или в другое место.
  2. Если это другое место, кроме /usr/local, добавьте его в свой PATH.
  3. Перезагрузите свою оболочку, чтобы получить обновленную версию PATH.
  4. С этого момента вы сможете вызывать следующие 2 бинарных файла python из вашей оболочки python2.5 и python2.6
  5. Создайте новый экземпляр virtualenv с помощью python2.6: mkvirtualenv --python=python2.6 yournewenv
20
ответ дан Thierry Lam 26 August 2018 в 01:39
поделиться

Эта процедура устанавливает Python2.7 в любом месте и исключает любые абсолютные ссылки на пути в вашей папке env (управляется virtualenv) . Даже virtualenv не установлен абсолютно.

Таким образом, теоретически вы можете отбросить каталог верхнего уровня в архив, распространить и запустить все, что настроено в tarball на машине, на которой нет Python (или любых зависимостей) .

Свяжитесь со мной по любым вопросам. Это всего лишь часть текущего, более масштабного проекта, который я разрабатываю. Теперь для капли ...

  1. Настроить папки среды.
    $ mkdir env
    $ mkdir pyenv
    $ mkdir dep
    
  2. Получите Python-2.7.3 и virtualenv без установки корневой ОС.
    $ cd dep
    $ wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
    $ wget https://raw.github.com/pypa/virtualenv/master/virtualenv.py
    
  3. Извлеките и установите Python-2.7.3 в директорию pyenv. make clean является необязательным, если вы делаете это 2-е, 3-е, N-е время ...
    $ tar -xzvf Python-2.7.3.tgz
    $ cd Python-2.7.3
    $ make clean
    $ ./configure --prefix=/path/to/pyenv
    $ make && make install
    $ cd ../../
    $ ls
    dep    env    pyenv
    
  4. Создайте свой virtualenv
    $ dep/virtualenv.py --python=/path/to/pyenv/bin/python --verbose env
    
  5. Исправьте символическую ссылку на python2.7 в env/include/
    $ ls -l env/include/
    $ cd !$
    $ rm python2.7
    $ ln -s ../../pyenv/include/python2.7 python2.7
    $ cd ../../
    
  6. Исправить оставшиеся символические ссылки на python в env. Вам придется удалить символически связанные каталоги и воссоздать их, как указано выше. Кроме того, вот синтаксис для принудительного создания символической ссылки на месте.
    $ ls -l env/lib/python2.7/
    $ cd !$
    $ ln -sf ../../../pyenv/lib/python2.7/UserDict.py UserDict.py
    [...repeat until all symbolic links are relative...]
    $ cd ../../../
    
  7. Тест
    $ python --version
    Python 2.7.1
    $ source env/bin/activate
    (env)
    $ python --version
    Python 2.7.3
    

Aloha.

4
ответ дан toszter 26 August 2018 в 01:39
поделиться

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

3
ответ дан user 26 August 2018 в 01:39
поделиться
Другие вопросы по тегам:

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