在linux / apache服务器上使用python作为CGI,第一行(定义解释器,shebang)应该是这样的:
#!/usr/bin/env python
在windows / apache服务器上运行相同的python CGI,第一行(定义解释器的那一行)应该是这样的:(假设python安装到c:/ python27)
#!c:/python27/python.exe
是否可以选择设置相同的行,以便在将文件从linux移动到Windows时不需要进行任何更改?
答案 0 :(得分:1)
这里描述的完整答案: http://my.opera.com/NoteMe/blog/running-python-as-cgi-in-apache-in-windows
在Windows下 - 下一次更改apache配置文件:
AddHandler cgi-script .py
从下一行中删除“hash”(“#”):
#ScriptInterpreterSource Registry
此处可以找到更多详细信息和一些有关安全性的其他数据: How do you use the Apache "ScriptInterpreterSource Registry-Strict" directive?
答案 1 :(得分:1)
所以您有shebang行#!/usr/bin/env python
实际上,Windows中缺少的是 env.exe 应用程序。
从GnuWin项目下载以下ZIP文件 https://sourceforge.net/projects/gnuwin32/files/coreutils/5.3.0/:
coreutils-5.3.0-bin.zip
coreutils-5.3.0-dep.zip
在同一驱动器上创建 \ usr \ bin 文件夹,Windows的Apache HTTP起始于此驱动器,例如:c:\usr\bin
解压缩到创建的\ usr \ bin文件夹中:
env.exe from coreutils-5.3.0-bin.zip;
libiconv2.dll,libintl3.dll ,来自coreutils-5.3.0-dep.zip
您应该在其中具有以下文件:
C:\usr\bin>dir
Volume in drive C is OSDisk
Volume Serial Number is DEAD-BEEF
Directory of C:\usr\bin
01/23/2019 10:24 AM <DIR> .
01/23/2019 10:24 AM <DIR> ..
04/20/2005 01:41 PM 24,064 env.exe
03/16/2004 03:37 PM 898,048 libiconv2.dll
10/09/2004 11:25 AM 101,888 libintl3.dll
3 File(s) 1,024,000 bytes
宾果!现在,您的Apache将正确解释shebang行。
对于那些想从Python虚拟环境中运行Python CGI脚本的人。
如果您在c:\py-venv
中创建了Python虚拟环境,请将以下行添加到Apache httpd.conf中,以获取Python CGI脚本所在的目录。这些脚本将由Apache使用Python虚拟环境的二进制文件和模块执行。
# Python virtual environment folder
Define VENV "c:/py-venv"
# Python CGI scripts location
Define PY_CGI "c:/test/cgi"
<Directory "${PY_CGI}">
AllowOverride None
Order allow,deny
Allow from all
Options ExecCGI FollowSymLinks
Options -Indexes
Require all granted
SetEnv VIRTUAL_ENV ${VENV}
SetEnv PATH "${VENV}/Scripts;${PATH}"
</Directory>