Fix urllib3 dependency error on installation of tutor

requests depends on urllib3<1.26.0, while urllib3==1.26.0 was just
released. We need to introduce a constraint on urllib3 to avoid the
following error when running `pip install -e`:

    pkg_resources.ContextualVersionConflict: (urllib3 1.26.0
    (./venv/lib/python3.7/site-packages),
    Requirement.parse('urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1'),
    {'requests'})

 We will be able to remove this constraint once requests becomes
 compatible with urllib3==1.26.0. To test this change just run `pip
 install -e tutor` and then run a dummy command, such as `tutor local
 stop`.
This commit is contained in:
Régis Behmo 2020-11-11 10:36:42 +01:00
parent 6c4d9619fd
commit ad858cd699
6 changed files with 54 additions and 34 deletions

View File

@ -4,6 +4,7 @@ Note: Breaking changes between versions are indicated by "💥".
## Unreleased
- [Bugfix] Fix dependency error during `pip install tutor` due to urllib3 incompatibility
- [Bugfix] Fix user ID checking under Windows.
- [Bugfix] Fix template rendering for Windows users.
- [Improvement] Switch to `bcrypt` for htpasswd password generation, for better portability on Windows.

View File

@ -5,3 +5,6 @@ pycryptodome
jinja2>=2.9
kubernetes
pyyaml>=4.2b1
# Installing urllib3==1.26.0 causes compatibility errors with requests==2.24.0
urllib3<1.26.0

View File

@ -6,11 +6,11 @@
#
appdirs==1.4.4 # via -r requirements/base.in
cachetools==4.1.1 # via google-auth
certifi==2020.6.20 # via kubernetes, requests
certifi==2020.11.8 # via kubernetes, requests
chardet==3.0.4 # via requests
click-repl==0.1.6 # via -r requirements/base.in
click==7.1.2 # via -r requirements/base.in, click-repl
google-auth==1.22.1 # via kubernetes
google-auth==1.23.0 # via kubernetes
idna==2.10 # via requests
jinja2==2.11.2 # via -r requirements/base.in
kubernetes==12.0.0 # via -r requirements/base.in
@ -19,14 +19,14 @@ oauthlib==3.1.0 # via requests-oauthlib
prompt-toolkit==3.0.8 # via click-repl
pyasn1-modules==0.2.8 # via google-auth
pyasn1==0.4.8 # via pyasn1-modules, rsa
pycryptodome==3.9.8 # via -r requirements/base.in
pycryptodome==3.9.9 # via -r requirements/base.in
python-dateutil==2.8.1 # via kubernetes
pyyaml==5.3.1 # via -r requirements/base.in, kubernetes
requests-oauthlib==1.3.0 # via kubernetes
requests==2.24.0 # via kubernetes, requests-oauthlib
rsa==4.6 # via google-auth
six==1.15.0 # via click-repl, google-auth, kubernetes, python-dateutil, websocket-client
urllib3==1.25.11 # via kubernetes, requests
urllib3==1.25.11 # via -r requirements/base.in, kubernetes, requests
wcwidth==0.2.5 # via prompt-toolkit
websocket-client==0.57.0 # via kubernetes

View File

@ -10,21 +10,21 @@ astroid==2.4.2 # via pylint
black==20.8b1 # via -r requirements/dev.in
bleach==3.2.1 # via readme-renderer
cachetools==4.1.1 # via -r requirements/base.txt, google-auth
certifi==2020.6.20 # via -r requirements/base.txt, kubernetes, requests
certifi==2020.11.8 # via -r requirements/base.txt, kubernetes, requests
cffi==1.14.3 # via cryptography
chardet==3.0.4 # via -r requirements/base.txt, requests
click-repl==0.1.6 # via -r requirements/base.txt
click==7.1.2 # via -r requirements/base.txt, black, click-repl, pip-tools
colorama==0.4.4 # via twine
cryptography==3.2 # via secretstorage
cryptography==3.2.1 # via secretstorage
docutils==0.16 # via readme-renderer
google-auth==1.22.1 # via -r requirements/base.txt, kubernetes
google-auth==1.23.0 # via -r requirements/base.txt, kubernetes
idna==2.10 # via -r requirements/base.txt, requests
importlib-metadata==2.0.0 # via keyring, twine
isort==5.6.4 # via pylint
jeepney==0.4.3 # via keyring, secretstorage
jeepney==0.5.0 # via keyring, secretstorage
jinja2==2.11.2 # via -r requirements/base.txt
keyring==21.4.0 # via twine
keyring==21.5.0 # via twine
kubernetes==12.0.0 # via -r requirements/base.txt
lazy-object-proxy==1.4.3 # via astroid
markupsafe==1.1.1 # via -r requirements/base.txt, jinja2
@ -32,31 +32,31 @@ mccabe==0.6.1 # via pylint
mypy-extensions==0.4.3 # via black
oauthlib==3.1.0 # via -r requirements/base.txt, requests-oauthlib
packaging==20.4 # via bleach
pathspec==0.8.0 # via black
pathspec==0.8.1 # via black
pip-tools==5.3.1 # via -r requirements/dev.in
pkginfo==1.6.1 # via twine
prompt-toolkit==3.0.8 # via -r requirements/base.txt, click-repl
pyasn1-modules==0.2.8 # via -r requirements/base.txt, google-auth
pyasn1==0.4.8 # via -r requirements/base.txt, pyasn1-modules, rsa
pycparser==2.20 # via cffi
pycryptodome==3.9.8 # via -r requirements/base.txt
pycryptodome==3.9.9 # via -r requirements/base.txt
pygments==2.7.2 # via readme-renderer
pyinstaller-hooks-contrib==2020.9 # via pyinstaller
pyinstaller-hooks-contrib==2020.10 # via pyinstaller
pyinstaller==4.0 # via -r requirements/dev.in
pylint==2.6.0 # via -r requirements/dev.in
pyparsing==2.4.7 # via packaging
python-dateutil==2.8.1 # via -r requirements/base.txt, kubernetes
pyyaml==5.3.1 # via -r requirements/base.txt, kubernetes
readme-renderer==28.0 # via twine
regex==2020.10.23 # via black
regex==2020.10.28 # via black
requests-oauthlib==1.3.0 # via -r requirements/base.txt, kubernetes
requests-toolbelt==0.9.1 # via twine
requests==2.24.0 # via -r requirements/base.txt, kubernetes, requests-oauthlib, requests-toolbelt, twine
rfc3986==1.4.0 # via twine
rsa==4.6 # via -r requirements/base.txt, google-auth
secretstorage==3.1.2 # via keyring
secretstorage==3.2.0 # via keyring
six==1.15.0 # via -r requirements/base.txt, astroid, bleach, click-repl, cryptography, google-auth, kubernetes, packaging, pip-tools, python-dateutil, readme-renderer, websocket-client
toml==0.10.1 # via black, pylint
toml==0.10.2 # via black, pylint
tqdm==4.51.0 # via twine
twine==3.2.0 # via -r requirements/dev.in
typed-ast==1.4.1 # via astroid, black

View File

@ -8,12 +8,12 @@ alabaster==0.7.12 # via sphinx
appdirs==1.4.4 # via -r requirements/base.txt
babel==2.8.0 # via sphinx
cachetools==4.1.1 # via -r requirements/base.txt, google-auth
certifi==2020.6.20 # via -r requirements/base.txt, kubernetes, requests
certifi==2020.11.8 # via -r requirements/base.txt, kubernetes, requests
chardet==3.0.4 # via -r requirements/base.txt, requests
click-repl==0.1.6 # via -r requirements/base.txt
click==7.1.2 # via -r requirements/base.txt, click-repl
docutils==0.16 # via sphinx
google-auth==1.22.1 # via -r requirements/base.txt, kubernetes
google-auth==1.23.0 # via -r requirements/base.txt, kubernetes
idna==2.10 # via -r requirements/base.txt, requests
imagesize==1.2.0 # via sphinx
jinja2==2.11.2 # via -r requirements/base.txt, sphinx
@ -24,11 +24,11 @@ packaging==20.4 # via sphinx
prompt-toolkit==3.0.8 # via -r requirements/base.txt, click-repl
pyasn1-modules==0.2.8 # via -r requirements/base.txt, google-auth
pyasn1==0.4.8 # via -r requirements/base.txt, pyasn1-modules, rsa
pycryptodome==3.9.8 # via -r requirements/base.txt
pycryptodome==3.9.9 # via -r requirements/base.txt
pygments==2.7.2 # via sphinx
pyparsing==2.4.7 # via packaging
python-dateutil==2.8.1 # via -r requirements/base.txt, kubernetes
pytz==2020.1 # via babel
pytz==2020.4 # via babel
pyyaml==5.3.1 # via -r requirements/base.txt, kubernetes
requests-oauthlib==1.3.0 # via -r requirements/base.txt, kubernetes
requests==2.24.0 # via -r requirements/base.txt, kubernetes, requests-oauthlib, sphinx
@ -36,7 +36,7 @@ rsa==4.6 # via -r requirements/base.txt, google-auth
six==1.15.0 # via -r requirements/base.txt, click-repl, google-auth, kubernetes, packaging, python-dateutil, websocket-client
snowballstemmer==2.0.0 # via sphinx
sphinx-rtd-theme==0.5.0 # via -r requirements/docs.in
sphinx==3.2.1 # via -r requirements/docs.in, sphinx-rtd-theme
sphinx==3.3.0 # via -r requirements/docs.in, sphinx-rtd-theme
sphinxcontrib-applehelp==1.0.2 # via sphinx
sphinxcontrib-devhelp==1.0.2 # via sphinx
sphinxcontrib-htmlhelp==1.0.3 # via sphinx

View File

@ -2,23 +2,39 @@ import io
import os
from setuptools import find_packages, setup
here = os.path.abspath(os.path.dirname(__file__))
HERE = os.path.abspath(os.path.dirname(__file__))
with io.open(os.path.join(here, "README.rst"), "rt", encoding="utf8") as f:
readme = f.read()
about = {}
with io.open(os.path.join(here, "tutor", "__about__.py"), "rt", encoding="utf-8") as f:
exec(f.read(), about)
requirements = []
with io.open(
os.path.join(here, "requirements", "base.in"), "rt", encoding="utf-8"
) as f:
requirements = [line.strip() for line in f]
def load_readme():
with io.open(os.path.join(HERE, "README.rst"), "rt", encoding="utf8") as f:
return f.read()
def load_about():
about = {}
with io.open(
os.path.join(HERE, "tutor", "__about__.py"), "rt", encoding="utf-8"
) as f:
exec(f.read(), about) # pylint: disable=exec-used
return about
def load_requirements():
with io.open(
os.path.join(HERE, "requirements", "base.in"), "rt", encoding="utf-8"
) as f:
return [line.strip() for line in f if is_requirement(line)]
def is_requirement(line):
return not (line.strip() == "" or line.startswith("#"))
ABOUT = load_about()
setup(
name="tutor-openedx",
version=about["__version__"],
version=ABOUT["__version__"],
url="https://docs.tutor.overhang.io/",
project_urls={
"Documentation": "https://docs.tutor.overhang.io/",
@ -30,12 +46,12 @@ setup(
author="Overhang.io",
author_email="contact@overhang.io",
description="The docker-based Open edX distribution designed for peace of mind",
long_description=readme,
long_description=load_readme(),
long_description_content_type="text/x-rst",
packages=find_packages(exclude=["tests*"]),
include_package_data=True,
python_requires=">=3.5",
install_requires=requirements,
install_requires=load_requirements(),
entry_points={"console_scripts": ["tutor=tutor.commands.cli:main"]},
classifiers=[
"Development Status :: 5 - Production/Stable",