python - 如何在 windows 和 linux (apache) 上使用相同的 python cgi 文件?

标签 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 时不需要更改?

最佳答案

所以你有 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. 在 Apache HTTP for Windows 启动的同一驱动器上创建 \usr\bin 文件夹,例如:c:\usr\bin

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

    • env.exe 来自 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>
    

关于python - 如何在 windows 和 linux (apache) 上使用相同的 python cgi 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20514082/

相关文章:

python - “PathCollection”不可迭代 - 创建可拖动的散点图

linux - Arm Linux sshd-telnetd 内核 Oops 跟踪

linux - 如何在 Linux 字符设备驱动程序中使用 FIFO,以便使用该驱动程序的两个进程可以进行通信

c++ - 使用 av_frame_get_buffer() 时发生内存泄漏

c# - 在 VS 2015 和 VS 2013 上运行同一段代码时出现问题

python - 在从传感器读取数据而不打印从传感器读取的数据时,While 循环无法立即工作?

python - 用于查找阶乘的 Python 代码的问题

windows - mongo 3.6.2 无法在 Windows 7/10 中启动

python - 如何访问pytorch分类模型的预测? (伯特)

linux - 是否可以直接从C程序或shell脚本向搜索引擎发送搜索参数?