IIS下配置Python虚拟环境项目

 0 0条评论

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用户权限即可。

本文作者:双黑

版权声明:本站文章欢迎链接分享,禁止全文转载!

游客