从脚本激活virtualenv之后,为什么我的python指向虚拟环境之外?

时间:2018-10-08 08:31:28

标签: python python-requests

我将cronjob设置为在特定时间调用脚本( ex- 2 4 5 10 * python3 mayank / exp / test.py )。 调用我的 test.py 时,我正在激活test.py脚本中的virtualenv,如下所示。

activate = "/home/myserver/schedule_py3/bin/activate_this.py"
exec(open(activate).read())

激活虚拟环境(其中具有python3以及运行脚本所需的软件包)后,我正尝试导入请求,它向我显示错误:-

  

文件“ schedule_module / Schedule / notification_task.py”,第2行,在       汇入要求     在第43行的“ /usr/lib/python2.7/site-packages/requests/init.py”文件中       导入urllib3     文件“ /usr/lib/python2.7/site-packages/urllib3/init.py”,第10行,在       来自.connectionpool import(     在第31行的“ /usr/lib/python2.7/site-packages/urllib3/connectionpool.py”文件中       来自.connection import(     文件“ /usr/lib/python2.7/site-packages/urllib3/connection.py”,第45行,在       来自.util.ssl_ import(     在第4行的文件“ /usr/lib/python2.7/site-packages/urllib3/util/init.py”中       从.request import make_headers     文件“ /usr/lib/python2.7/site-packages/urllib3/util/request.py”,第5行,在       从..exceptions导入UnrewindableBodyError   ImportError:无法导入名称UnrewindableBodyError

我可以看到它正在使用python2.7。谁能告诉我我错了吗?

注意-我已经在虚拟环境中使用pip3安装了所有软件包。

5 个答案:

答案 0 :(得分:2)

  

异常导入UnrewindableBodyError ImportError:无法导入   名称UnrewindableBodyError

以上错误很可能是由于“ urllib3 ”软件包损坏了。卸载/安装将解决问题:

sudo pip uninstall urllib3
sudo pip install --upgrade urllib3

另一个问题可能是,通过 pip 安装了 urllib3 ,并且通过 yum 回购安装了请求,或相反亦然。在这种情况下,解决方法是完全删除这些库并通过相同的存储库进行安装。

我建议您在yum上点一下以安装这两个软件包,因为它易于维护并且可以提供更多控制。操作系统补丁或VM维护活动等所需的任何进一步的yum更新,都不会影响通过pip安装的软件包。

首先通过pip和yum删除“ urllib3 ”和“ 请求”的所有安装:

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更新时,请始终使用虚拟环境来避免冲突。

答案 1 :(得分:0)

您可能想要查看激活虚拟环境的方法。

可以找到一个很好的例子here

例如:

ex- 2 4 5 10 * /home/myserver/schedule_py3/<PATH TO VIRTUALENV PYTHON> <FULL PATH TO SCRIPT>mayank/exp/test.py

答案 2 :(得分:0)

因为您使用系统python而不是virtualenv'ed。 首先使用Activate,然后从您的env文件夹使用python。

2 4 5 10 * source /home/myserver/schedule_py3/bin/activate_this.py && python something_else.py

答案 3 :(得分:0)

我遇到了一个稍微不同的错误:

cannot import name 'HTTPConnectionPool' from 'urllib3.connectionpool'

是由于B / c引起的,原因是我的应用程序中有一个名为queue.py的文件。

urllib3中的

env/lib/python3.7/site-packages/urllib3/packages/six.py正在尝试运行

import queue

但是没有导入正确的queue.py,而是导入了我的queue.py!

我将queue.py重命名为其他名称,这似乎可以解决问题。

答案 4 :(得分:0)

在我的服务器中,我们使用 root 权限安装了所有软件包,但在其他帐户中使用。我遇到过这种错误。

解决方法:

sudo chmod 755 -R /usr/lib/python2.7/site-packages/

干杯

奥利弗