我目前正在Windows上进行本地开发,但需要将我的文件上传到Linux服务器。 但是,我遇到了一个问题,我需要在每个文件的顶部包含一个shebang,以告诉Apache要运行哪个python应用程序,这在Windows和Linux上自然会有所不同,因此我需要更改所有文件作为将它们上传到Linux的一部分。 有没有办法消除对shebang的需求,或者提供一个在Windows和Linux下都可以工作的shebang?
我的 httpd.conf
<IfModule wsgi_module>
LoadFile "C:/Python/Python36-32/python36.dll"
LoadModule wsgi_module "C:/Python/Python36-32/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win32.pyd"
WSGIPythonHome "C:/Python/Python36-32"
</IfModule>
<VirtualHost 127.0.0.1:80>
DocumentRoot "C:/Python/Web"
<Directory "C:/Python/Web">
Allow from all
Require all granted
Options Indexes Includes ExecCGI FollowSymLinks
AllowOverride All
Order deny,allow
DirectoryIndex index.py
</Directory>
AddHandler cgi-script .cgi .pl .py
</VirtualHost>
如果我的 index.py 包括 shebang,例如它看起来像:
#!C:PythonPython36-32python.exe
print("Content-Type: texthtmln")
print("Heelolo ->>>>>>>>")
--> 在Windows上,我得到了预期的结果:
Heelolo ->>>>>>>>
如果我不包括 shebang,例如:
print("Content-Type: texthtmln")
print("Heelolo ->>>>>>>>")
我在 apache 错误中收到以下消息.log
[Fri May 26 14:05:31.326900 2017] [win32:error] [pid 4700:tid 1972] [client 127.0.0.1:50743] AH02102: C:/Web/Hello/index.py is not executable; ensure interpreted scripts have "#!" or "'!" first line
任何想法如何跨平台完成这项工作?
尽管您尝试加载mod_wsgi,但您弄错了,并且无论如何都没有告诉Apache托管任何WSGI应用程序。你也没有将你的Python Web应用程序转换为WSGI应用程序。看:
- http://modwsgi.readthedocs.io/en/develop/user-guides/quick-configuration-guide.html
还要去学习一个简单的Python Web框架,比如Flask,而不是尝试从头开始做事。
不过,在尝试之前,还要删除wsgi_module
的条件。也就是说,而不是:
<IfModule wsgi_module>
LoadFile "C:/Python/Python36-32/python36.dll"
LoadModule wsgi_module "C:/Python/Python36-32/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win32.pyd"
WSGIPythonHome "C:/Python/Python36-32"
</IfModule>
您应该只是:
LoadFile "C:/Python/Python36-32/python36.dll"
LoadModule wsgi_module "C:/Python/Python36-32/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win32.pyd"
WSGIPythonHome "C:/Python/Python36-32"
条件意味着只有在模块已经加载时才应用这些指令。问题是模块在该检查中加载,因此显然不会加载。