Почему мой питон указывает вне виртуальной среды после активации virtual env из скрипта?
Я установил свой cronjob для вызова моего скрипта в определенное время (например, 2 4 5 10 * python3 mayank / exp / test.py). Когда вызывается мой test.py, я активирую virtualenv в своем скрипте test.py следующим образом.
activate = "/home/myserver/schedule_py3/bin/activate_this.py"
exec(open(activate).read())
После активации виртуальной среды (в которой есть python3 и пакеты, необходимые для запуска скрипта), я пытаюсь импортировать запросы, которые показывают мне ошибку как:-
Файл "schedule_module/Schedule/ messages_task.py", строка 2, в запросах на импорт Файл "/usr/lib/python2.7/site-packages/requests/ init.py", строка 43, в файле импорта urllib3 "/ usr / lib / python2.7 / site-packages / urllib3 / init.py ", строка 10, из импорта.connectionpool (файл"/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", строка 31, из импорта.connection (файл "/usr/lib/python2.7/site-packages/urllib3/connection.py", строка 45, из импорта.util.ssl_ (файл "/usr/lib/python2.7 / site-packages / urllib3 / util / init.py ", строка 4, из файла.request import make_headers File "/usr/lib/python2.7/site-packages/urllib3/util/request.py", строка 5, в из..exceptions import UnrewindableBodyError ImportError: невозможно импортировать имя UnrewindableBodyError
Как я вижу, что это берет python2.7. Может кто-нибудь сказать мне, где я не прав?
Примечание. Я установил все пакеты с помощью pip3 в своей виртуальной среде.
5 ответов
исключения import UnrewindableBodyError ImportError: невозможно импортировать имя UnrewindableBodyError
Вышеупомянутая ошибка, вероятно, связана с повреждением пакета urllib3. удаление / установка устранит проблему:
sudo pip uninstall urllib3
sudo pip install --upgrade urllib3
Другая проблема может заключаться в том, что urllib3 был установлен через pip, а запросы устанавливались через репозиторий yum или наоборот. В этом случае исправление состоит в том, чтобы полностью удалить эти библиотеки и установить их через то же репо.
Я рекомендую установить оба пакета с помощью pip over yum, так как он прост в обслуживании и дает больше контроля. Любые дальнейшие обновления yum, необходимые для установки исправлений ОС, обслуживания виртуальных машин и т. Д., Не повлияют на пакеты, установленные через pip.
Сначала удалите все установки " urllib3" и " запросов" через pip и yum:
sudo pip uninstall urllib3 -y
sudo pip uninstall requests -y
sudo yum remove python-urllib3 -y
sudo yum remove python-requests -y
Теперь установите оба пакета только через pip:
sudo pip install --upgrade urllib3
sudo pip install --upgrade requests
Чтобы установить оба пакета только через yum:
sudo yum install python-urllib3
sudo yum install python-requests
Примечание. Всегда используйте виртуальную среду, чтобы избежать конфликтов при обновлении yum на уровне ОС.
Потому что вы используете системный python вместо virtualenv'ed. Сначала используйте активировать, затем python из папки env.
2 4 5 10 * source /home/myserver/schedule_py3/bin/activate_this.py && python something_else.py
на моем сервере мы установили весь пакет с правами root, но использовали в другой учетной записи. Я сталкивался с такой ошибкой.
способ решения:
sudo chmod 755 -R /usr/lib/python2.7/site-packages/
ваше здоровье
Оливер
У меня была немного другая ошибка:
cannot import name 'HTTPConnectionPool' from 'urllib3.connectionpool'
Это было вызвано тем, что у меня был файл с именем queue.py
в моем приложении.
env/lib/python3.7/site-packages/urllib3/packages/six.py
из urllib3 пытался запустить
import queue
но вместо импорта правильного queue.py импортировал мой queue.py!
Я переименовал свой queue.py
к чему-то другому, и это, похоже, решило проблему.
Возможно, вы захотите взглянуть на свой метод активации виртуальной среды.
Хороший пример можно найти здесь
Примером этого может быть:
ex- 2 4 5 10 * /home/myserver/schedule_py3/<PATH TO VIRTUALENV PYTHON> <FULL PATH TO SCRIPT>mayank/exp/test.py