我将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安装了所有软件包。
答案 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
的文件。
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/
干杯
奥利弗