Improve synapseclient installation instructions

Description

We require Python 3 for a user to be able to install the latest version of the synapseclient however, if a user runs this command (sudo) pip install (--upgrade) synapseclient with Python 2.7 installed, the client installs successfully but then returns ambiguous error messages:

kmontgomery@Kelseys-MacBook-Pro ~ % pip install synapseclient
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Processing ./Library/Caches/pip/wheels/81/c9/4c/f389598a0bd020907d8a36abedb4805e1dc49c5d88dde2fd01/synapseclient-1.9.4-cp27-none-any.whl
Requirement already satisfied: deprecated==1.2.4 in /usr/local/lib/python2.7/site-packages (from synapseclient) (1.2.4)
Requirement already satisfied: keyring==12.0.2 in /usr/local/lib/python2.7/site-packages (from synapseclient) (12.0.2)
Requirement already satisfied: backports.csv in /usr/local/lib/python2.7/site-packages (from synapseclient) (1.0.7)
Requirement already satisfied: future in /usr/local/lib/python2.7/site-packages (from synapseclient) (0.18.2)
Requirement already satisfied: requests>=2.21.0 in /usr/local/lib/python2.7/site-packages (from synapseclient) (2.22.0)
Requirement already satisfied: six in /usr/local/lib/python2.7/site-packages (from synapseclient) (1.13.0)
Requirement already satisfied: wrapt<2,>=1 in /usr/local/lib/python2.7/site-packages (from deprecated==1.2.4->synapseclient) (1.11.2)
Requirement already satisfied: entrypoints in /usr/local/lib/python2.7/site-packages (from keyring==12.0.2->synapseclient) (0.3)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python2.7/site-packages (from requests>=2.21.0->synapseclient) (2019.11.28)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python2.7/site-packages (from requests>=2.21.0->synapseclient) (1.25.7)
Requirement already satisfied: idna<2.9,>=2.5 in /usr/local/lib/python2.7/site-packages (from requests>=2.21.0->synapseclient) (2.8)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python2.7/site-packages (from requests>=2.21.0->synapseclient) (3.0.4)
Requirement already satisfied: configparser>=3.5; python_version == "2.7" in /usr/local/lib/python2.7/site-packages (from entrypoints->keyring==12.0.2->synapseclient) (4.0.2)
Installing collected packages: synapseclient
Successfully installed synapseclient-1.9.4
kmontgomery@Kelseys-MacBook-Pro ~ % synapse -h
Traceback (most recent call last):
File "/usr/local/bin/synapse", line 5, in <module>
from synapseclient._main_ import main
File "/usr/local/lib/python2.7/site-packages/synapseclient/_init_.py", line 274, in <module>
from .client import Synapse, login
File "/usr/local/lib/python2.7/site-packages/synapseclient/client.py", line 92, in <module>
from .table import Schema, SchemaBase, Column, TableQueryResult, CsvFileTable, TableAbstractBaseClass
File "/usr/local/lib/python2.7/site-packages/synapseclient/table.py", line 307, in <module>
from enum import Enum
ImportError: No module named enum

Should instructions say explicitly install our client using pip3 as many operating machine have Python 2.7 by default?

Is this a bug with enum that can be fixed?

Environment

macOS 10.15.6

Activity

Show:
Jordan Kiang
July 28, 2020, 9:27 PM

On systems with both a Python 2 and Python 3 installation, the plain pip command will typically point to the Python 2 installation and a separate pip3 command is associated with the Python 3 installation.

By installing using the plain pip command in such an environment it installed the last available version of the synapseclient that supported Python 2 (1.9.4) rather than the latest version of synapseclient which requires Python 3. These older versions of synapseclient don’t work well when you don’t install the “optional” pandas dependency, because synapseclient itself doesn’t specify that the Enum package is a dependency, but the Pandas package does, so if you install synapseclient without pandas you can get the above error due to the undeclared dependency. This should really be considered a bug in these older versions. It is not an issue in client versions 2.0 and above (these versions required Python 3 which has Enum built in so it does not need to be declared as a dependency anyway).

In any case I think the intention of someone who is installing today is likely to install into Python 3 with the latest version of synapseclient. We should likely specify that people use the pip3 command which for the majority of installers will be what they intend.

Please review to see if you think it satisfactorily makes this clearer.

Kelsey Montgomery
July 30, 2020, 12:48 AM

Thanks Jordan - much clearer. I approved the PR.

Jordan Kiang
August 4, 2020, 5:00 AM

These updates have been merged/published.

Assignee

Jordan Kiang

Reporter

Kelsey Montgomery

Labels

None

Validator

Kelsey Montgomery

Development Area

None

Release Version History

None

Fix versions

Affects versions

Priority

Major
Configure