在我的项目`venv`中,`python3 manage.py runserver`会出错,但是如果我使用绝对路径python3来执行这个就行了

时间:2018-05-09 11:18:22

标签: python virtualenv

在我的项目venv中,python3 manage.py runserver会收到错误:

...
sio = socketio.Server(async_mode=async_mode)
AttributeError: module 'socketio' has no attribute 'Server'

但是如果我使用绝对路径python3来执行它就没关系。

# /usr/local/Python3/bin/python3.5 manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
... 
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
(27144) wsgi starting up on http://0.0.0.0:8000

但是,如果我检查venv中的python3路径:

(venv_dist) [root@www lll]# ll /home/ldl/repo/myProject/venv_dist/bin/python3
lrwxrwxrwx. 1 root root 9 5月   9 10:43 /home/ldl/repo/myProject/venv_dist/bin/python3 -> python3.5
(venv_dist) [root@www lll]# ll /home/ldl/repo/myProjecg/venv_dist/bin/python3.5
lrwxrwxrwx. 1 root root 32 5月   9 10:43 /home/ldl/repo/myProject/venv_dist/bin/python3.5 -> /usr/local/Python3/bin/python3.5

您可以看到,python3中的venv最后会重定向到/usr/local/Python3/bin/python3.5

绝对路径python3可以执行成功:

/usr/local/Python3/bin/python3.5 manage.py runserver

但是软链接python3无法成功运行。

python3 manage.py runserver 

我的系统是CentOS-7。

修改-1

使用哪个:

which python3
/home/ldl/repo/myProject/venv_dist/bin/python3

使用python runserver:

(venv_dist) [root@www myProject]# python --version
Python 3.5.2
(venv_dist) [root@www myProject]# python manage.py runserver 

出现上限错误。

修改-2

在venv内:

(venv_dist) [root@www myProject]# pip3 freeze | grep -i socketio
python-socketio==1.9.0
socketio==0.0.9
在vevn之外:

[root@www myProject]# pip3 freeze | grep -i socketio
python-socketio==1.8.4

编辑-3

在项目之外,我也可以运行server。 它也指向/usr/local/Python3/bin/python3

[root@www myProject]# python3 manage.py runserver
...
Quit the server with CONTROL-C.
(28747) wsgi starting up on http://0.0.0.0:8000
^C[root@www myProject]# which python3 
/usr/bin/python3
[root@www myProject]# ll /usr/bin/python3
lrwxrwxrwx. 1 root root 30 12月 10 14:17 /usr/bin/python3 -> /usr/local/Python3/bin/python3

修改-4

我认为此socketio包与此问题无关,在我的项目pip3 uninstall socketio中,此问题仍然存在。

但如果在我的Mac上,如果我在socketio中卸载venv,也会遇到问题。

...
sio = socketio.Server(async_mode=async_mode)
AttributeError: module 'socketio' has no attribute 'Server'

在我的Mac中我必须在socketio中重新安装venv,然后它才能正常工作。

修改-5

在我的远程CentOS7.2服务器ls venv_dist中,有一个软链接lib64引用lib

(venv_dist) [root@www venv_dist]# ls
bin  include  lib  lib64  pip-selfcheck.json  pyvenv.cfg

但在我的Mac中,没有lib64

0 个答案:

没有答案