Python接触的很少,更没有配置过python项目,这次因为特殊需求,做了IIS下的配置,做个笔迹记录下来。
一,安装IIS
这就不多说了,应用程序中,一下几个选项必须勾上,切记。
二,安装Python
我这里安装的是Python3.9。记得添加到环境变量那个选项勾上。
选择自定义安装,因为默认安装的目录层级太深,而且还是一个隐藏文件夹。
下一步之后Install fro all users建议勾上。这样目录会自动换成Program Files。实际开发中我直接安装才C:\Python39文件夹中了。
三,配置虚拟环境
命令行下 输入,后面的路径就是虚拟环境所在的目录。
python -m venv c:\myenv\game
CD进入虚拟环境Scripts文件夹,执行activate文件,这样就能进入虚拟环境了。
四,安装依赖
进入虚拟环境后,在命令行前会有当前虚拟环境名字的提示,执行pip install pipreqs
再执行
pip install -r requirements.txt
这样所有依赖就安装好了。
五,修改配置文件
项目是由Django框架开发的,所以找到settings.py修改数据库连接。
六,配置IIS
这里是整个项目比较繁琐的部分,我曾在这里踩过坑,花了一天时间没有解决,后面会讲,其实就是1分钟搞定的事。
1,再FastCGI设置里添加应用
2,选择虚拟环境所在的Python位置,切记一定是虚拟环境的位置,参数这里你就根据虚拟环境目录来写。
3,添加网站绑定域名,这就没啥好说的,常规操作
4,配置网站映射
这里有两个方法,一个就是在网站处理程序映射下添加映射。
添加完成后,会在网站根目录自动生成一个web.config,这里我不阐述了,因为我没有用这种方法,大家可以自己网上搜。
我用的方法是,直接写好web.config这样,网站就会处理映射了。也就是说跟上面的逻辑正好相反。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<clear />
<add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule"
scriptProcessor="C:\myenv\game\Scripts\python.exe|
C:\myenv\game\Lib\site-packages\wfastcgi.py"
resourceType="Unspecified" requireAccess="Script" />
</handlers>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
<appSettings>
<add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
<add key="PYTHONPATH" value="C:\Hz_sec" />
<add key="DJANGO_SETTINGS_MODULE" value="Hz_sec.settings" />
</appSettings>
</configuration>
注意scriptProcessor节点必须同IIS配置中的第二部相同。
至于appSettings节点下的内容就是Django框架相关配置了。
5,踩坑
正常情况下这样配置好就能正常访问了。
Error occurred while reading WSGI handler:
Traceback (most recent call last):
File "C:\Python39\lib\logging\config.py", line 564, in configure
handler = self.configure_handler(handlers[name])
File "C:\Python39\lib\logging\config.py", line 745, in configure_handler
result = factory(**kwargs)
File "C:\Python39\lib\logging\__init__.py", line 1142, in __init__
StreamHandler.__init__(self, self._open())
File "C:\Python39\lib\logging\__init__.py", line 1171, in _open
return open(self.baseFilename, self.mode, encoding=self.encoding,
PermissionError: [Errno 13] Permission denied: 'C:\\Hz_sec\\logs'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\myenv\game\Lib\site-packages\wfastcgi.py", line 791, in main
env, handler = read_wsgi_handler(response.physical_path)
File "C:\myenv\game\Lib\site-packages\wfastcgi.py", line 633, in read_wsgi_handler
handler = get_wsgi_handler(os.getenv("WSGI_HANDLER"))
File "C:\myenv\game\Lib\site-packages\wfastcgi.py", line 605, in get_wsgi_handler
handler = handler()
File "C:\myenv\game\lib\site-packages\django\core\wsgi.py", line 12, in get_wsgi_application
django.setup(set_prefix=False)
File "C:\myenv\game\lib\site-packages\django\__init__.py", line 19, in setup
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "C:\myenv\game\lib\site-packages\django\utils\log.py", line 76, in configure_logging
logging_config_func(logging_settings)
File "C:\Python39\lib\logging\config.py", line 809, in dictConfig
dictConfigClass(config).configure()
File "C:\Python39\lib\logging\config.py", line 571, in configure
raise ValueError('Unable to configure handler '
ValueError: Unable to configure handler 'file'
StdOut:
StdErr:
但是我碰到上面一段错误。整整花了一天时间,反复安装环境,还是没有解决,几乎搜遍全网,咋看一下肯定是环境相关问题啊,其实重点在于:
PermissionError: [Errno 13] Permission denied: 'C:\\Hz_sec\\logs'
这一句,其实就是logs文件没有权限啊,那就简单了。
饶了那么大一圈,其实就是改一下IIS用户权限即可。