2

Environment:

  • Mac OS X 10.8.5
  • Apache2 (version that came with the OS)
  • Python2 (version that came with the OS)
  • Python3 (installed via Homebrew)

This code returns "testing" in the web browser:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

from __future__ import print_function, division

print("Content-Type: text/html")  # HTML is following.
print()  # Blank line, end of headers.

print("testing")

But this code returns "Internal Server Error" in the web browser (using python3 this time):

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

print("Content-Type: text/html")  # HTML is following.
print()  # Blank line, end of headers.

print("testing")

...and in the Apache2 error log:

env: python3: No such file or directory
Premature end of script headers: test_cgi.py

In echo $PATH:

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

Looking deeper, ls -al /usr/bin/python*:

/usr/bin/python
/usr/bin/python-config
/usr/bin/python2.5 -> ../../System/Library/Frameworks/Python.framework/Versions/2.5/bin/python2.5
/usr/bin/python2.5-config -> ../../System/Library/Frameworks/Python.framework/Versions/2.5/bin/python2.5-config
/usr/bin/python2.6 -> ../../System/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6
/usr/bin/python2.6-config -> ../../System/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6-config
/usr/bin/python2.7 -> ../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
/usr/bin/python2.7-config -> ../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7-config
/usr/bin/pythonw
/usr/bin/pythonw2.5 -> ../../System/Library/Frameworks/Python.framework/Versions/2.5/bin/pythonw2.5
/usr/bin/pythonw2.6 -> ../../System/Library/Frameworks/Python.framework/Versions/2.6/bin/pythonw2.6
/usr/bin/pythonw2.7 -> ../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw2.7

And in ls -al /usr/local/bin/python*:

/usr/local/bin/python3 -> ../Cellar/python3/3.3.3/bin/python3
/usr/local/bin/python3.3 -> ../Cellar/python3/3.3.3/bin/python3.3
/usr/local/bin/python3.3-config -> ../Cellar/python3/3.3.3/bin/python3.3-config
/usr/local/bin/pythonw3.3 -> ../Cellar/python3/3.3.3/bin/pythonw3.3

Questions:

  1. Since the first item in my PATH is /usr/local/bin, why can't Apache find Python3 ?
  2. How can I tell Apache to use Python3 ?

Thank you for your help :)

1 Answer 1

2

I have the exact same problem; I cannot figure out how to get apache to recognize python3. Furthermore, if you specify the interpreter manually:

#!/usr/bin/python

Works, however:

#!/usr/local/bin/python3

Complains about a "malformed header from script" in the apache error log... I have no idea why this is an issue as it should just be running an arbitrary interpreter.

EDIT

Okay, so my problem was actually just me not outputting header information. Your issue is that no python3 environment variable has been set. Try changing the first line to:

#!/usr/local/bin/python3
Sign up to request clarification or add additional context in comments.

1 Comment

problem starts when you're writing scripts on laptop but then deploy them somewhere else, you can't keep changing the shebang line everytime you want to develop, because on linux/ubuntu it's different, so i always used /usr/bin/env python3 but then hit the same homebrew python versioning thing issue. this isn't the ultimate solution i believe ...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.