[ANN] Spyder 4.0 first release candidate

148 views
Skip to first unread message

Carlos Córdoba

unread,
Nov 3, 2019, 12:53:57 AM11/3/19
to spyd...@googlegroups.com

Hi all,

On the behalf of the Spyder Project Contributors, I’m pleased to announce the first release candidate of our next major version: Spyder 4.0.

We’ve been working on this version for more than three years now and as far as we know it’s working very well. There are still several bugs to squash but we encourage all people who like the bleeding edge to give it a try. This beta version is released two weeks and a half after Spyder 4.0 beta7 and it includes almost 230 commits.

Spyder 4.0 comes with several interesting and exciting new features. The most important ones are:

  • Main Window

    • Dark theme for the entire application.
    • A new Plots pane to browse all inline figures generated by the IPython console.
    • Rename the following panes:
      • Static code analysis to Code Analysis
      • File explorer to Files
      • Find in files to Find
      • History log to History
      • Project explorer to Project
    • Create a separate window when undocking all panes.
    • Show current conda environment (if any) in the status bar.
  • Editor

    • Code folding.
    • Indentation guides.
    • A class/method/function lookup panel. This can be shown in the menu Source > Show selector for classes and functions.
    • Autosave functionality to recover unsaved files after a crash.
    • Optional integration with the Kite completion engine.
    • Code completion and linting are provided by the Python Language Server.
  • IPython Console

    • Run files in an empty namespace.
    • Open dedicated consoles for Pylab, Sympy and Cython.
    • Run cells through a new function called runcell.
    • Run cells by name.
  • Debugger

    • Code completion.
    • Execute multi-line statements.
    • Syntax highlighting.
    • Permanent history.
    • runfile and runcell can be called when the debugger is active.
    • Debug cells with Alt+Shift+Return.
  • Variable Explorer

    • New viewer to inspect any Python object in a tree-like representation.
    • Filter variables by name or type.
    • MultiIndex support in the Dataframe viewer.
    • Support for all Pandas indexes.
    • Support for sets.
    • Support for Numpy object arrays.
  • Files

    • Associate external applications to open specific file extensions.
    • Context menu action to open files externally.
    • Multi-select functionality with Ctrl/Shift + mouse click.
    • Copy/paste files and their absolute or relative paths.
    • Use special icons for different file types.
  • Outline

    • Show cells grouped in sections.
    • Add default name to all cells.

For a more complete list of changes, please see our changelog

You can easily install this beta if you use Anaconda by running:

conda update qt pyqt
conda install -c spyder-ide spyder=4.0.0rc1

Or you can use pip with this command:

pip install --pre -U spyder

Enjoy!
Carlos

Rational-IM

unread,
Nov 7, 2019, 5:28:46 PM11/7/19
to spyder

This is a fantastic upgrade - the new dark format is a great addition. I love the plots windows too. 

Is this a proper place to provide some initial feedback? If not, please let me know where should I post my questions/observations.

I will post later some observations regarding Window layouts (I work with multiple 4K monitors and I believe the location of undocked windows is not holding, forcing me to rearrange a series of windows after each reboot - but I will work with it for a few days and report back).

One issue I encountered, however, is regarding the treatment of variables that were defined when running a subroutine and brought back with a return() function. For instance, look at the error I just got when running my code (that didn't show this behavior with version 3):

Traceback (most recent call last):

  File "C:\WORK FILES\Portfolio Analysis\Odysseus_Python\Odysseus_control_v1.1.py", line 73, in <module>
    long_cm_0 = np.ones((days, securities))     # must set variables with ones at this

NameError: name 'days' is not defined

However, observe from the variables explorer that the variable "days" is defined:

Annotation 2019-11-07 111034.jpg


I will check the new available settings to make sure I'm not missing something obvious. However, I would appreciate any help on this topic as it will force me to re-run subroutines if the variables brought back are not recognized when calling other subroutines.

Congratulations on the new release.

John Lambert

unread,
Nov 7, 2019, 5:28:46 PM11/7/19
to spyder
When trying to install from Anaconda I get the following errors:

(base) C:\Users\me>conda update qt pyqt
Collecting package metadata (current_repodata.json): done
Solving environment: done

# All requested packages already installed.


(base) C:\Users\me>conda install -c spyder-ide spyder=4.0.0rc1
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: \
Found conflicts! Looking for incompatible packages.
This can take several minutes.  Press CTRL-C to abort.
Examining jupyter_client:   1%|▌                                                      | 4/357 [00:00<00:00, 420.60it/|
Comparing specs that have this dependency:  27%|██████████▋                             | 4/15 [00:07<00:20,  1.89s/i-
Comparing specs that have this dependency:  33%|█████████████▎                          | 5/15 [00:13<00:26,  2.69s/i- \
Comparing specs that have this dependency:  60%|████████████████████████                | 9/15 [00:36<00:24,  4.01s/i/
Examining jupyter_core:  17%|█████████                                              | 59/357 [02:45<2:17:14, 27.63s/i- \
Comparing specs that have this dependency:  35%|██████████████                          | 7/20 [00:33<01:01,  4.74s/i/ -
Comparing specs that have this dependency:  60%|███████████████████████▍               | 12/20 [01:06<00:44,  5.51s/i\ -
Examining spyder-kernels:  56%|██████████████████████████████▎                       | 200/357 [05:39<36:59, 14.14s/i\ |
Examining jedi:  61%|███████████████████████████████████████▎                        | 219/357 [06:50<24:43, 10.75s/i/
Comparing specs that have this dependency:   7%|██▋                                     | 1/15 [00:02<00:38,  2.75s/i| -
Comparing specs that have this dependency:  13%|█████▎                                  | 2/15 [00:06<00:41,  3.19s/i\
Examining rope:  66%|██████████████████████████████████████████▏                     | 235/357 [09:35<20:36, 10.13s/it]\failed                                                                                                                 |

UnsatisfiableError: The following specifications were found to be incompatible with each other:



Package jupyter_client conflicts for:
ipywidgets -> ipykernel[version='>=4.5.1'] -> jupyter_client
anaconda==2019.10 -> ipykernel==5.1.2=py36h39e3cac_0 -> jupyter_client[version='>=4.1|>=5.2.0|>=5.2.3|>=5.3.1']
_ipyw_jlab_nb_ext_conf -> jupyterlab -> notebook[version='>=4.3'] -> nbconvert -> jupyter_client[version='>=4.2']
qtconsole -> ipykernel[version='>=4.1'] -> jupyter_client
spyder-kernels -> ipykernel[version='>=5.1.3'] -> jupyter_client
jupyter -> nbconvert -> jupyter_client[version='>=4.1|>=4.2|>=5.2.0|>=5.3.1']
widgetsnbextension -> notebook[version='>=4.4.1'] -> jupyter_client[version='>=5.2.0|>=5.3.1']
spyder=4.0.0rc1 -> nbconvert -> jupyter_client[version='>=4.1|>=4.2|>=5.3.4']
_ipyw_jlab_nb_ext_conf -> ipywidgets -> ipykernel[version='>=4.5.1'] -> jupyter_client[version='>=5.2.0|>=5.3.1']
notebook -> nbconvert -> jupyter_client[version='>=4.2']
spyder-kernels -> jupyter_client[version='>=5.2.3|>=5.2.5|>=5.3.4']
jupyterlab -> notebook[version='>=4.3'] -> jupyter_client[version='>=5.2.0|>=5.3.1']
anaconda==2019.10 -> jupyter_client==5.3.3[build='py37_1|py27_1|py36_1']
jupyterlab -> notebook[version='>=4.3'] -> nbconvert -> jupyter_client[version='>=4.2']
jupyter_console -> jupyter_client
spyder=4.0.0rc1 -> qtconsole[version='>=4.5.5'] -> ipykernel[version='>=4.1'] -> jupyter_client
ipywidgets -> widgetsnbextension[version='>=3.4.0,<3.5.0'] -> notebook[version='>=4.4.1'] -> nbconvert -> jupyter_client[version='>=4.2']
jupyterlab_server -> notebook[version='>=4.2.0'] -> jupyter_client[version='>=5.2.0|>=5.3.1']
jupyterlab_server -> notebook[version='>=4.2.0'] -> nbconvert -> jupyter_client[version='>=4.2']
qtconsole -> jupyter_client[version='>=4.1']
ipywidgets -> widgetsnbextension[version='>=3.4.0,<3.5.0'] -> notebook[version='>=4.4.1'] -> jupyter_client[version='>=5.2.0|>=5.3.1']
jupyter_client
notebook -> jupyter_client[version='>=5.2.0|>=5.3.1']
widgetsnbextension -> notebook[version='>=4.4.1'] -> nbconvert -> jupyter_client[version='>=4.2']
ipykernel -> jupyter_client
nbconvert -> jupyter_client[version='>=4.2']
Package jupyter_core conflicts for:
anaconda-navigator -> anaconda-client -> nbformat[version='>=4.4.0'] -> jupyter_core
widgetsnbextension -> notebook[version='>=4.4.1'] -> jupyter_client -> jupyter_core[version='>=4.6.0']
nbconvert -> jupyter_core
widgetsnbextension -> notebook[version='>=4.4.1'] -> jupyter_core[version='>=4.4.0']
anaconda-project -> anaconda-client -> nbformat[version='>=4.4.0'] -> jupyter_core
anaconda==2019.10 -> notebook==6.0.1=py36_0 -> jupyter_core[version='>=4.4.0']
_ipyw_jlab_nb_ext_conf -> ipywidgets -> ipykernel[version='>=4.5.1'] -> jupyter_client -> jupyter_core[version='>=4.6.0']
ipywidgets -> ipykernel[version='>=4.5.1'] -> jupyter_client -> jupyter_core[version='>=4.4.0|>=4.6.0']
notebook -> jupyter_core[version='>=4.4.0']
nbformat -> jupyter_core
spyder-kernels -> jupyter_client[version='>=5.3.4'] -> jupyter_core
spyder=4.0.0rc1 -> nbconvert -> jupyter_client[version='>=4.2'] -> jupyter_core[version='>=4.6.0']
jupyter_console -> jupyter_client -> jupyter_core[version='>=4.6.0']
anaconda-client -> nbformat[version='>=4.4.0'] -> jupyter_core
jupyter_client -> jupyter_core[version='>=4.6.0']
jupyter_core
jupyter -> ipykernel -> jupyter_client -> jupyter_core[version='>=4.6.0']
qtconsole -> jupyter_core
notebook -> jupyter_client -> jupyter_core[version='>=4.6.0']
qtconsole -> jupyter_client[version='>=4.1'] -> jupyter_core[version='>=4.6.0']
jupyterlab_server -> notebook[version='>=4.2.0'] -> jupyter_client -> jupyter_core[version='>=4.6.0']
jupyterlab -> notebook[version='>=4.3'] -> jupyter_core[version='>=4.4.0']
jupyterlab_server -> notebook[version='>=4.2.0'] -> jupyter_core[version='>=4.4.0']
jupyterlab -> notebook[version='>=4.3'] -> jupyter_client -> jupyter_core[version='>=4.6.0']
nbconvert -> jupyter_client[version='>=4.2'] -> jupyter_core[version='>=4.6.0']
_ipyw_jlab_nb_ext_conf -> jupyterlab -> notebook[version='>=4.3'] -> jupyter_core[version='>=4.4.0']
anaconda==2019.10 -> jupyter_core==4.5.0=py_0
ipykernel -> jupyter_client -> jupyter_core[version='>=4.6.0']
spyder-kernels -> jupyter_core[version='>=4.6.0']
spyder=4.0.0rc1 -> nbconvert -> jupyter_core
ipywidgets -> nbformat[version='>=4.2.0'] -> jupyter_core
jupyter -> notebook -> jupyter_core[version='>=4.4.0']
Package jedi conflicts for:
spyder-kernels -> ipykernel[version='>=5.1.3'] -> ipython -> jedi[version='>=0.10']
spyder=4.0.0rc1 -> qtconsole[version='>=4.5.5'] -> ipykernel[version='>=4.1'] -> ipython[version='>=5.0'] -> jedi[version='>=0.10']
qtconsole -> ipykernel[version='>=4.1'] -> ipython -> jedi[version='>=0.10']
notebook -> ipykernel -> ipython -> jedi[version='>=0.10']
spyder=4.0.0rc1 -> jedi=0.14.1
_ipyw_jlab_nb_ext_conf -> ipywidgets -> ipython[version='>=4.0.0'] -> jedi[version='>=0.10']
ipython -> jedi[version='>=0.10']
ipykernel -> ipython -> jedi[version='>=0.10']
ipywidgets -> ipython[version='>=4.0.0'] -> jedi[version='>=0.10']
jupyterlab_server -> notebook[version='>=4.2.0'] -> ipykernel -> ipython -> jedi[version='>=0.10']
jupyter_console -> ipython -> jedi[version='>=0.10']
jupyterlab -> notebook[version='>=4.3'] -> ipykernel -> ipython -> jedi[version='>=0.10']
jedi
anaconda==2019.10 -> jedi==0.15.1[build='py37_0|py36_0|py27_0']
anaconda==2019.10 -> ipython==7.8.0=py36h39e3cac_0 -> jedi[version='>=0.10|>=0.9']
jupyter -> ipykernel -> ipython -> jedi[version='>=0.10']
widgetsnbextension -> notebook[version='>=4.4.1'] -> ipykernel -> ipython -> jedi[version='>=0.10']
spyder=4.0.0rc1 -> python-language-server[version='>=0.29.3,<0.30.0'] -> jedi[version='>=0.14.1,<0.16']
Package spyder-kernels conflicts for:
anaconda==2019.10 -> spyder==3.3.6=py36_0 -> spyder-kernels[version='>=0.5.0,<1']
spyder-kernels
spyder=4.0.0rc1 -> spyder-kernels[version='>=1.7.0,<1.8.0']
anaconda==2019.10 -> spyder-kernels==0.5.2[build='py37_0|py36_0|py27_0']
Package spyder conflicts for:
spyder=4.0.0rc1

bcolsen

unread,
Nov 7, 2019, 6:08:07 PM11/7/19
to spyder
By default in Spyder4 Scripts run scripts in a new empty namespace and append the results to the console namespace. This was done to prevent difficult to detect bugs among new Spyder users.  There is an option on the run configuration per file dialog to run a file in the current namespace. This option can also be set universally in the general preferences.

I think that using code cells is a great way to use this type of work flow where you want to run a longer subroutine and run code against it later. This plays nicely with the code error checking as well.

Carlos Córdoba

unread,
Nov 7, 2019, 6:12:26 PM11/7/19
to spyd...@googlegroups.com, Rational-IM
About this


> I will post later some observations regarding Window layouts (I work with multiple 4K monitors and I believe the location of undocked windows is not holding, forcing me to rearrange a series of windows after each reboot - but I will work with it for a few days and report back)

Currently we're not saving the layout of undocked windows when closing Spyder, but it's definitely something we could do (we just haven't thought about it).

Please open a new issue for it here

https://github.com/spyder-ide/spyder/issues

so we don't forget to tackle it in the future.


Best,
Carlos

El 7/11/19 a las 11:16 a. m., Rational-IM escribió:
--
You received this message because you are subscribed to the Google Groups "spyder" group.
To unsubscribe from this group and stop receiving emails from it, send an email to spyderlib+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/spyderlib/92765517-10c7-4d2f-b063-fc3856770e98%40googlegroups.com.

Rational-IM

unread,
Nov 8, 2019, 7:41:04 PM11/8/19
to spyder
It took me a minute to locate the "Configuration per file..." [under "Run"] to change the set-up of my core file (from where I call a series of subroutines in other files - I use this format to make sure similar functions are grouped together in tabs on the Editor. I prefer this approach vs using cells). Now my core file (and the universal preferences [under "Tools/Preferences/Run"] are set to "Run in console's namespace instead of an empty one". Now variables brought back with a return() function are "defined" for all files. Thanks for the help.

Rational-IM

unread,
Nov 8, 2019, 7:41:04 PM11/8/19
to spyder
That would be a great addition - I just opened a new issue on GitHub. Thanks!
To unsubscribe from this group and stop receiving emails from it, send an email to spyd...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages