如何在Windows和Linux(apache)上使用相同的python cgi文件?

时间:2013-12-11 08:27:41

标签: python linux windows apache cgi

在linux / apache服务器上使用python作为CGI,第一行(定义解释器,shebang)应该是这样的:

#!/usr/bin/env python 

在windows / apache服务器上运行相同的python CGI,第一行(定义解释器的那一行)应该是这样的:(假设python安装到c:/ python27)

#!c:/python27/python.exe

是否可以选择设置相同的行,以便在将文件从linux移动到Windows时不需要进行任何更改?

2 个答案:

答案 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 应用程序。

  1. 从GnuWin项目下载以下ZIP文件 https://sourceforge.net/projects/gnuwin32/files/coreutils/5.3.0/

    • coreutils-5.3.0-bin.zip

    • coreutils-5.3.0-dep.zip

  2. 在同一驱动器上创建 \ usr \ bin 文件夹,Windows的Apache HTTP起始于此驱动器,例如:c:\usr\bin

  3. 解压缩到创建的\ usr \ bin文件夹中:

    • env.exe from coreutils-5.3.0-bin.zip;

    • libiconv2.dll,libintl3.dll ,来自coreutils-5.3.0-dep.zip

  4. 您应该在其中具有以下文件:

    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脚本的人。

  1. 如果您在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>