Невозможно активировать Python на удаленном компьютере - PullRequest
0 голосов
/ 28 января 2020

Я перенес виртуальную среду на удаленный компьютер. Я пытаюсь активировать python 3.8, но мне не везет.

Виртуальная среда, которую я использую, была создана с использованием venv. Но я создал его на своем Ma c, а затем переместил на целевой компьютер Linux. Ниже показано, что на компьютере Linux установлена ​​python 3.8

kylefoley@kfoley76:~/byu_corpus_small/venv_byu/bin$ ls
activate       activate_this.py  pip     pip3.8     python3
activate.csh   easy_install      pip2    python     python-config
activate.fish  easy_install-2.7  pip2.7  python2    wheel
Activate.ps1   easy_install-3.8  pip3    python2.7

. Я активировал виртуальную среду с помощью следующих команд:

kylefoley@kfoley76:~/byu_corpus_small$ source venv_byu/bin/activate

Однако следующая команда показывает, что python 2.7 было активировано

(venv_byu) kylefoley@kfoley76:~/byu_corpus_small/code$ python --version
Python 2.7.13

Далее, когда я запустил одну из моих программ, я получил синтаксическую ошибку, которая вызвала бы только python 2.7:

(venv_byu) kylefoley@kfoley76:~/byu_corpus_small/code$ python3 fix_mistakes.py
  File "fix_mistakes.py", line 113
    p = print
    p (f"{round(c - b,0)} seconds")
SyntaxError: invalid syntax

Даже когда я запускаю команда python3, она активировала python 3.5, о чем свидетельствует следующее:

(venv_byu) kylefoley@kfoley76:~/byu_corpus_small/code$ python3
Python 3.5.3 (default, Sep 27 2018, 17:25:39) 

Я даже думаю, что компьютер даже не использует мою рабочую среду, а интерпретатор python по умолчанию из-за следующее:

(venv_byu) kylefoley@kfoley76:~/byu_corpus_small/code$ which python
/usr/bin/python

Я бы подумал, что в моей виртуальной среде будет находиться intepreter:

/venv_byu/bin/python3
##### UPDATE

Я смог установить venv на linux но я все еще активирую python 3.5.3

kylefoley@kfoley76:~/byu_corpus_small$ source venv_byu/bin/activate
(venv_byu) kylefoley@kfoley76:~/byu_corpus_small$ which python
/home/kylefoley/byu_corpus_small/venv_byu/bin/python
(venv_byu) kylefoley@kfoley76:~/byu_corpus_small$ python --version
Python 3.5.3

Очевидно, что у загруженной среды не было 3.8

(venv_byu) kylefoley@kfoley76:~/byu_corpus_small/venv_byu/bin$ ls
activate      activate.fish  easy_install-3.5  pip3    python
activate.csh  easy_install   pip               pip3.5  python3

Теперь мне просто нужно выяснить как получить 3.8

1 Ответ

2 голосов
/ 28 января 2020

Виртуальные среды не переносимы. Вы должны создать новую виртуальную среду на конечном компьютере и заполнить ее необходимыми пакетами. Перечисление их с помощью pip freeze на локальном компьютере или перечисление их вручную в requirements.txt являются двумя распространенными подходами.

Стандартная виртуальная среда, поставляемая с Python, фактически жестко кодирует путь виртуальной среды, поэтому вы даже не можете переименовать каталог локально, тем более скопировать его в другую структуру каталогов на другом компьютере.

Команду activate необходимо запускать с source по разным причинам, но это также означает, что он не очень устойчив к сбоям. Например, он может выдать ошибку или произойти сбой в режиме без вывода сообщений, но при этом обновить приглашение так, чтобы оно выглядело так, как будто виртуальная среда была успешно активирована.

Чтобы создать новую виртуальную среду на компьютере, на котором установлена ​​Python 3.8 установлен как /usr/local/bin/python3.8, вы можете запустить

/usr/local/bin/python3.8 -m venv venv_byu

Затем вам нужно activate эту среду и pip install или иным образом заполнить ее необходимыми библиотеками.

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

...