tslearn icon indicating copy to clipboard operation
tslearn copied to clipboard

[Improve Docs] tslearn.datasets requires extra installs on MacOS

Open GillesVandewiele opened this issue 2 years ago • 3 comments

On MacOS, the tslearn.datasets does not work out-of-the-box.

In order to make it work, you need to apply the following steps:

  1. Go to your finder
  2. run "/Apps/Python<VERSION>/Install Certificates.command". This basically installs the certifi package with pip.

Perhaps we should add this to the documentation page of our datasets module?

GillesVandewiele avatar Mar 31 '22 13:03 GillesVandewiele

Hum, I guess if we do it like that, there is a high chance that the package will not be installed on the target python. Shouldn't we rather state in the docs that on MacOS, one needs to install the certifi package with pip?

rtavenar avatar Mar 31 '22 13:03 rtavenar

Yes, that seems like an ideal fix to me Romain!

GillesVandewiele avatar Mar 31 '22 13:03 GillesVandewiele

It is perhaps important to note that the Install Certificates script does a bit more than just pip install certifi:

#!/bin/sh

/Library/Frameworks/Python.framework/Versions/3.9/bin/python3.9 << "EOF"

# install_certifi.py
#
# sample script to install or update a set of default Root Certificates
# for the ssl module.  Uses the certificates provided by the certifi package:
#       https://pypi.org/project/certifi/

import os
import os.path
import ssl
import stat
import subprocess
import sys

STAT_0o775 = ( stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR
             | stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP
             | stat.S_IROTH |                stat.S_IXOTH )

def main():
    openssl_dir, openssl_cafile = os.path.split(
        ssl.get_default_verify_paths().openssl_cafile)

    print(" -- pip install --upgrade certifi")
    subprocess.check_call([sys.executable,
        "-E", "-s", "-m", "pip", "install", "--upgrade", "certifi"])

    import certifi

    # change working directory to the default SSL directory
    os.chdir(openssl_dir)
    relpath_to_certifi_cafile = os.path.relpath(certifi.where())
    print(" -- removing any existing file or link")
    try:
        os.remove(openssl_cafile)
    except FileNotFoundError:
        pass
    print(" -- creating symlink to certifi certificate bundle")
    os.symlink(relpath_to_certifi_cafile, openssl_cafile)
    print(" -- setting permissions")
    os.chmod(openssl_cafile, STAT_0o775)
    print(" -- update complete")

if __name__ == '__main__':
    main()
EOF

I don't have a MacOS so will leave the issue open for someone who does (we had this issue with a student of mine)

GillesVandewiele avatar Mar 31 '22 13:03 GillesVandewiele