Python2.7 - Interpreter syntax error after installing Python3 - python

When I'm trying to write anything on the python27 interpreter, I'm getting syntax error, no matter what I'm typing (Not just print, literally anything). Couldn't find anyone else experiencing the same issue, so no clue why this is happening.
I've recently installed Python3 and PyCharm, but I still want to use python27 for some legacy code I have. The problem started to happen after I installed Python3 and PyCharm (Not sure if PyCharm may be related or not).
my OS is Windows10 x64.
Any ideas anyone?
Python27:
Python3:

I can reproduce this perfectly by using a non-break space unicode character as the last character:
Python 2.7.16 (default, Apr 11 2019, 01:11:37)
[GCC 4.2.1 Compatible FreeBSD Clang 6.0.0 (tags/RELEASE_600/final 326565)] on freebsd11
Type "help", "copyright", "credits" or "license" for more information.
>>> print "Test" 
File "<stdin>", line 1
print "Test" 
^
SyntaxError: invalid syntax
>>> import os 
File "<stdin>", line 1
import os 
^
SyntaxError: invalid syntax
>>> 111 
File "<stdin>", line 1
111 
^
SyntaxError: invalid syntax
>>>
When I copy/paste that into IPython based on python 3, it shows up:
In [1]: test = 'print "Test" '
Out[1]: 'print "Test"\xa0'
In [2]: import unicodedata
In [3]: unicodedata.name(test[-1])
Out[3]: 'NO-BREAK SPACE'
I expect the same to happen with any space-like unicode character.
When typing code into Python, use End to go to the end of the line, and then one or more Backspace to remove any extra whitespace, before you press Enter. If your cursor moves when you press End, that would confirm the issue.
If not, then maybe it is whatever the terminal program sends to Python when you press Enter.
I would advise to just remove python 2.7 and port any remaining 2.7 specific code to python 3.
Edit Since you still need Python 2, I would suggest to try running a python 2 script. If that works, the problem is probably with the terminal setup (like text encoding, line feed etc.) being different than what Python 2 expects. If scripts work, try one of the many different terminal programs available for ms-windows.

Related

Unable to run % python help(sys) in zsh on MacOS

I'm going through free Google Python training course. Real basic stuff. My OS is MacOS. Using MacOS Terminal. I can run python modules like hello.py.
I can run this to see my version:
% python --version
Python 3.9.12
However, this fails:
% python help(sys)
zsh: unknown file attribute: y
What do I need to change in my setup to resolve and be able to call simple help in Python?
Parentheses have a special meaning in zsh, so they must be escaped here to pass the argument as-is to Python. You can use \ in front of the parentheses (python help\(sys\)), but it's conventional to just quote the entire argument:
python 'help(sys)'
However, this still won't work (because the python command interprets it as a filename), you need to pass code via the -c flag to Python:
python -c 'help(sys)'
And that still won't work since you haven't loaded the sys package in that code. Do that, to get working code:
python -c 'import sys; help(sys)'
Konrad is right, but you are likely looking for a way to start Python interactive shell and execute statements there.
% python
Python 3.10.7 (main, Sep 15 2022, 01:52:03) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> help(sys)

What exactly does Spyder do to Unicode strings?

Running Python in a standard GNU terminal emulator on Ubuntu 14.04, I get the expected behavior when typing interactively:
>>> len('tiθ')
4
>>> len(u'tiθ')
3
The same thing happens when running an explicitly utf8-encoded script in Spyder:
# -*- coding: utf-8 -*-
print(len('tiθ'))
print(len(u'tiθ'))
...gives the following output, regardless of whether I run it in a new dedicated interpreter, or run in a Spyder-default interpreter (shown here):
>>> runfile('/home/dan/Desktop/mwe.py', wdir=r'/home/dan/Desktop')
4
3
But when typing interactively in a Python console within Spyder:
>>> len('tiθ')
4
>>> len(u'tiθ')
4
This issue has been brought up elsewhere, but that question regards differences between Windows and Linux. Here, I'm getting different results in different consoles on the same system, and the Python startup message in the terminal emulator and in the console within Spyder are identical:
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
What is going on here, and how can I get Python-within-Spyder to behave like Python-in-the-shell with regard to unicode strings? #martijn-pieters makes the comment on this question that
Spyder does all sorts of things to break normal a Python environment.
But I'm hoping there's a way to un-break this particular feature, since it makes it really hard to debug scripts in the IDE when I can't rely on my interactive typed commands to yield the same results as scripts run as a whole with their coding: utf-8 declaration.
UPDATES
In the GNU terminal:
>>> repr(u'tiθ')
"u'ti\\u03b8'"
>>> import sys
>>> sys.stdin.encoding
'UTF-8'
>>> sys.getdefaultencoding()
'ascii'
In Spyder console:
>>> repr(u'tiθ')
"u'ti\\xce\\xb8'"
>>> import sys
>>> sys.stdin.encoding # returns None
>>> sys.getdefaultencoding()
'UTF-8'
So knowing that, can I convince Spyder to behave like the GNU terminal?
After a bit of research, it seems that the strange behavior is at least in part built into Python (see this discussion thread; briefly, Python sets sys.stdin.encoding to None as default, and only changes it if it detects that the host is tty and it can detect the tty's encoding).
That said, a hackish workaround was just to tell Spyder to use /usr/bin/python3 as its executable instead of the default (which was Python 2.7.6). When running a Python 3 console within Spyder or within a GNU terminal emulator, I get results different (better!) than before, but importantly the results are consistent, regardless of whether running a script or typing interactively, and regardless of using GNU terminal or Spyder console:
>>> len('tiθ')
3
>>> len(u'tiθ')
3
>>> import sys
>>> sys.stdin.encoding
'UTF-8'
>>> sys.getdefaultencoding()
'utf-8'
This leads to other problems within Spyder, however: its sitecustomize.py script is not Python 3 friendly, for example, so every new interpreter starts with
Error in sitecustomize; set PYTHONVERBOSE for traceback:
SyntaxError: invalid syntax (sitecustomize.py, line 432)
The interpreter seems to work okay anyway, but it makes me nervous enough that I'm not considering this an "acceptable" answer, so if anyone else has a better idea...

Python, Command Line, Windows

NEW Edit. I am using Python2.7.5 in Windows 7. I'm new to command line arguments. I am trying to do this exercise:
Write a program that reads in a string on the command line and returns a table of the letters which occur in the string with the number of times each letter occurs. For example:
$ python letter_counts.py "ThiS is String with Upper and lower case Letters."
a 2
c 1
d 1
# etc.
I have some fundamental problems: How do I add strings to the command line?
I went to Control Panel and altered the Path (adding ;C:\Python27)
Now I'm in cmd.exe
This gets the right answer
>>>python
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
However these get SyntaxError: invalid syntax:
python letter_counts.py
C:\Python27\python.exe
C:\Python27\pythonw.exe
C:\Python27\python.exe .\letter_counts.py
Any suggestions? thank you!
In response to your question on 'adding strings to the command line'.
import sys
print sys.argv
will give you the command line args you passed in. In your case, it looks like you want the first argument, so you would do something like:
print sys.argv[1]
note that sys.argv[0] will give you the filename you passed into python, so you actually want [1] in this case.
I don't use Windows, but if you want an easy setup python environment you could look into ActivePython perhaps. Worst case or as a temporary solution you could just go to the folder where python.exe is located and run your scripts there.
After modifying your path, did you start up a new instance of the command prompt (this has caused me much grief in the past)? To check if your path change was successful:
echo %PATH%
and check to see if C:\Python2.7.5 was appended to it.
If not then run:
set PATH=%PATH%;C:\Python2.7.5
To call a python script with a command line argument (assuming that your script is in the current working directory):
python letter_counts.py "Your Text Goes Here"
OR if you just want to be overly verbose (or your PATH still isn't right):
C:\Python2.7.5\python.exe .\letter_counts.py "Your text still goes here"
EDIT:
Make sure you are doing this from the command prompt and not the python interpreter. To access the command prompt you can hit:
1. Windows Key + R
2. type "cmd" (without quotes) and hit enter

Python shell in Emacs freezes when using matplotlib

I previously thought that was the issue with IPython, but today I tested again, here is what I did:
Run emacs -Q in cmd window
Open a .py file
M-x, then run python-shell-switch-to-shell, RET, and RET. Then I have the Python shell ready
I in put the following code then:
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib.pyplot as plt
>>> plt.ion()
>>> plt.plot([1,2,3])
[<matplotlib.lines.Line2D object at 0x03068610>]
>>>
Actually after this, no figure shows up, and the shell is frozen, e.g., when I input:
>>> print("hello")
nothing happened...I haven't tested other plotting tools but matplotlib. I don't know if it is a bug. I've searched for a while, here and though Google, but no luck. My system is: Emacs 24.3 32 bit for Windows, under Windows 7. If others can duplicate same issue as here, I will report this as a bug.
I used IPython as the Python shell by:
C:/Python27/python.exe -i C:/Python27/Scripts/ipython-script.py --pylab
Then, I input figure(); plot([1,2,3]), as expected, the figure popup and freezes. Then I did: C-c C-d which runs comint-send-eof, and the figure actually get updated! But my IPython shell session is also terminated with the following message:
In [6]:
Do you really want to exit ([y]/n)?
Traceback (most recent call last):
File "C:/Python27/Scripts/ipython-script.py", line 9, in <module>
load_entry_point('ipython==0.13.1', 'console_scripts', 'ipython')()
SystemExit
If you suspect this is an IPython bug, please report it at:
https://github.com/ipython/ipython/issues
or send an email to the mailing list at ipython-dev#scipy.org
You can print a more detailed traceback right now with "%tb", or use "%debug"
to interactively debug it.
Extra-detailed tracebacks for bug-reporting purposes can be enabled via:
%config Application.verbose_crash=True
Any helpful clue here?!
one solution is:
(setq python-shell-interpreter "C:\\YourPython3Dist\\python.exe"
python-shell-interpreter-args "-i C:\\YourPython3Dist\\Scripts\\ipython3-script.py console --pylab=qt")
The Argument console in the call of ipython-script.py is the important one!
In Python 3 with qt backend it works for me. I don't know how it works with py 2.7. (should be no problem if these arguments are supported for ipytho-script.py)
I think it would take sometime until the problem is fixed. Until some Windows user actually debugs python.el.
Until then, why not try Emacs IPython Notebook? It is a better IPython binding for Emacs. You don't need to use the notebook part. You can think it as a replacement for python shell in python.el. (disclaimer: I am the author)

Why is Python 3.1.3 in the header listed as a syntax error?

I'm a newbie programmer so I'll do my best to clearly ask my question. I'm running Python scripts in Mac 10.6.5 and now trying to write and save to a text file (following instructions in HeadsUp Python book). Whenever I hit function+F5 (as instructed) I get the same "invalid syntax" error and Idle highlights the "1" in "Python 3.1.3" of the header. Here's the header to which I'm referring:
Python 3.1.3 (r313:86882M, Nov 30 2010, 09:55:56) [GCC 4.0.1 (Apple Inc. build 5494)] on darwin Type "copyright", "credits" or "license()" for more information.
Extremely frustrating. I've checked and rechecked the code but this doesn't seem to be code related because the "syntax error" is in regards to the header text that posts in every Idle/Python session. Help anyone?
... and Idle highlights the "1" in "Python 3.1.3" of the header ...
Standalone Python scripts used to contain a "header", but that would be just
#!/usr/bin/env python
or, depending on the name of the interpreter maybe
#!/usr/bin/env python3.1
Not sure I understand your question, though.
you are writing your script in the wrong IDLE window ! when starting IDLE, it opens 2 windows: one for writing a script and another one with an interactive python shell. executing the content of the interactive python shell makes no sense.
#squashua: I have the same issue when I try to run the code either in IDLE or Ubuntu terminal.
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25)
it highlights "5" as syntax error.

Categories