Django遇到的地雷,大家要注意


本文摘自php中文网,作者巴扎黑,侵删。

最近在折腾Django的WSGI应用,虽然Django自带的runserver很方便,但是对于复杂的功能它就无能为力了。

首先在Windows上遇到坑了,然后在windows10自带的Ubuntu遇到坑了,最后在虚拟机上总算解决了。

从以前的文章Django笔记《Django 学习笔记(二)第一个网页》可以看出我用的是windows10系统中的cmd来进行Django操作的,由于gunicorn应用是在unix系统中运行的,强制性在win平台运行就出错了。

1.windows遇到坑:

首先 cmd中输入:pip3 install gunicorn ,安装成功后,切换到项目目录(G:/Django/hello),具体操作是先切换到G盘,直接输入G:,接着输入cd Django\hello 就会出现 G:\Django\hello>这种情况。然后运行gunicorn,在Django项目中格式是:gunicorn yourproject.wsgi [-b 127.0.0.1.8000],括号内为选填,其他命令参数可以发送 gunicorn -h得到帮助文档。我这边的项目是hello,所以我的命令操作是:gunicorn hello.wsgi ,然后呢,出错ModuleNotFoundError: No module named 'pwd',没有pwd模块,好吧,没有找呗。找到后的代码贴在下面了,把找到的pwd.py放进了python3的安装目录D:\Program Files\Python\Python36\Lib,接着我们再运行gunicorn hello.wsgi ,结果又出错了:AttributeError: module 'socket' has no attribute 'AF_UNIX' ,然后我又在网上找,因为是unix系统中的gunicorn,结果找不到liunx中的sock.py文件,所以转战unix系统,windows弃坑。

1

2

3

4

5

6

7

8

9

G:\Django\hello>gunicorn hello.wsgi

Traceback (most recent call last):

  File "d:\program files\python\python36\lib\runpy.py", line 193, in _run_module_as_main"__main__", mod_spec)

  File "d:\program files\python\python36\lib\runpy.py", line 85, in _run_codeexec(code, run_globals)

  File "D:\Program Files\Python\Python36\Scripts\gunicorn.exe\__main__.py", line 5, in <module>

  File "d:\program files\python\python36\lib\site-packages\gunicorn\app\wsgiapp.py", line 10, in <module>from gunicorn.app.base import Application

  File "d:\program files\python\python36\lib\site-packages\gunicorn\app\base.py", line 12, in <module>from gunicorn import util

  File "d:\program files\python\python36\lib\site-packages\gunicorn\util.py", line 13, in <module>import pwd

ModuleNotFoundError: No module named 'pwd'

ModuleNotFoundError: No module named 'pwd'

1

2

3

4

from os import *

from pwd import *

 

def get_username():return getpwuid(getuid())[0]

pwd.py

1

2

3

4

5

6

7

8

9

10

11

12

G:\Django\hello>gunicorn hello.wsgi

Traceback (most recent call last):

  File "d:\program files\python\python36\lib\runpy.py", line 193, in _run_module_as_main"__main__", mod_spec)

  File "d:\program files\python\python36\lib\runpy.py", line 85, in _run_codeexec(code, run_globals)

  File "D:\Program Files\Python\Python36\Scripts\gunicorn.exe\__main__.py", line 5, in <module>

  File "d:\program files\python\python36\lib\site-packages\gunicorn\app\wsgiapp.py", line 10, in <module>from gunicorn.app.base import Application

  File "d:\program files\python\python36\lib\site-packages\gunicorn\app\base.py", line 13, in <module>from gunicorn.arbiter import Arbiter

  File "d:\program files\python\python36\lib\site-packages\gunicorn\arbiter.py", line 18, in <module>from gunicorn import sock, systemd, util

  File "d:\program files\python\python36\lib\site-packages\gunicorn\sock.py", line 101, in <module>class UnixSocket(BaseSocket):

  File "d:\program files\python\python36\lib\site-packages\gunicorn\sock.py", line 103, in UnixSocket

    FAMILY = socket.AF_UNIX

AttributeError: module 'socket' has no attribute 'AF_UNIX'

AttributeError: module 'socket' has no attribute 'AF_UNIX'

2.win10平台自带Ubuntu遇到的坑

win10开启Linux系统:首先,在win10设置-->安全与更新-->针对开发人员-->开发人员模式-->打钩,然后在控制面板-->程序个功能-->启动或关闭windows功能-->适用于Linux的windows子系统(Bata)-->打勾,最后用管理员运行shell-->输入cmd-->输入bash-->按照操作下载安装Linux。

安装完毕后,用管理员身份shell进入cmd,输入bash进入Linux系统。系统默认安装的有python2.7和python3.5。python默认启动的是python2,可以设置默认python为python3:

1

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 100  sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 200

阅读剩余部分

相关阅读 >>

Python sort函数怎么用

使用Python进行手机号和数字的随机生成方法

pandas妙招之 dataframe基础运算以及空值填充

人工智能为什么用Python

Python怎么安装numpy库

Python 语法串联

Python中怎么表示次方

Python中的或者怎么写

Python如何遍历字符串

Python的链表数据结构讲解

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...