在 linux/apache 服务器上使用 python 作为 CGI,第一行(定义解释器,shebang)应该是这样的:
#!/usr/bin/env python
在 windows/apache 服务器上运行相同的 python CGI,第一行(定义解释器的行)应该是这样的:(假设 python 安装到 c:/python27)
#!c:/python27/python.exe
是否有设置相同行的选项,以便在将文件从 linux 移动到 windows 时不需要更改?
最佳答案
所以你有 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
在 Apache HTTP for Windows 启动的同一驱动器上创建 \usr\bin 文件夹,例如:
c:\usr\bin
解压到创建的\usr\bin 文件夹中:
env.exe 来自 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>
关于python - 如何在 windows 和 linux (apache) 上使用相同的 python cgi 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20514082/