首页 > 解决方案 > 在我的项目`venv`中,`python3 manage.py runserver`会出错,但是如果我使用python3的绝对路径来执行就可以了

问题描述

在我的项目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

但是如果我检查 python3 路径venv

(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

你看,python3invenv重定向到/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运行服务器:

(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

在项目之外,我也可以运行服务器。这也是指向的/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

EDIT-4

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

但是如果在我的 Mac 中,如果我socketio在我venv的 .

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

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


EDIT-5

在我的远程 CentOS7.2 服务器lsvenv_dist,有一个软链接lib64指向lib.

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

但是在我的 Mac 中,没有lib64.

标签: pythonvirtualenv

解决方案


推荐阅读