Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to run tox 3.13.1 #1354

Closed
lockefox opened this issue Jun 26, 2019 · 18 comments
Closed

Unable to run tox 3.13.1 #1354

lockefox opened this issue Jun 26, 2019 · 18 comments
Assignees
Labels
bug:normal affects many people or has quite an impact needs:reproducer ideally a failing test marked as xfail. If that is not possible exact instructions to reproduce

Comments

@lockefox
Copy link

Having issues with tox 3.13.1 in my environment. 3.12.x works flawlessly. Others in my company are reporting no issues with tox launched from a py3 context. Unable to reproduce in another project yet

python: 2.7
environ: py27
os: ubuntu 16.02 docker

The process fails after creating a .tox/.tox/ folder and never generates the expected .tox/py## virtualenv folders

tox.ini

[tox]
envlist = py27

[testenv]
deps = 
    pytest
    pytest-cov==2.6.0
    cython
    numpy
    six
setenv =
    PYTHONHASHSEED = 0
commands =
    pytest [REDACTED_PROJECT_NAME]/tests --junitxml=test-results/junit-{envname}.xml

tox --sitepackages -rvv

using tox.ini: /home/[REDACTED_PROJECT_PATH]/tox.ini (pid 1)
could not satisfy requires MissingDependency(<Requirement('tox>=3.13.1')>,)
using tox-3.13.1 from /usr/local/lib/python2.7/dist-packages/tox/__init__.pyc (pid 1)
.tox start: getenv /home/[REDACTED_PROJECT_PATH]/.tox/.tox
.tox cannot reuse: -r flag
.tox create: /home/[REDACTED_PROJECT_PATH]/.tox/.tox
/usr/bin/python (/usr/bin/python) is {u'executable': u'/usr/bin/python', u'name': u'python', u'version_info': [2, 7, 12, u'final', 0], u'sysplatform': u'linux2', u'version': u'2.7.12 (default, Nov 12 2018, 14:36:49) \n[GCC 5.4.0 20160609]', u'is_64': True}
.tox uses /usr/bin/python
setting PATH=/home/[REDACTED_PROJECT_PATH]/.tox/.tox/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[12] /home/[REDACTED_PROJECT_PATH]/.tox$ /usr/bin/python -m virtualenv --system-site-packages --no-download --python /usr/bin/python .tox
Already using interpreter /usr/bin/python
New python executable in /home/[REDACTED_PROJECT_PATH]/.tox/.tox/bin/python
Installing setuptools, pip, wheel...
done.
.tox installdeps: tox >= 3.13.1
setting PATH=/home/[REDACTED_PROJECT_PATH]/.tox/.tox/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[21] /home/[REDACTED_PROJECT_PATH]l$ /home/[REDACTED_PROJECT_PATH]/.tox/.tox/bin/python -m pip install 'tox >= 3.13.1'
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.
Looking in indexes: https://pypi01.cid.cs.sys/simple/, https://pypi.python.org/simple
Requirement already satisfied: tox>=3.13.1 in /usr/local/lib/python2.7/dist-packages (3.13.1)
Requirement already satisfied: packaging>=14 in /usr/local/lib/python2.7/dist-packages (from tox>=3.13.1) (19.0)
Requirement already satisfied: six<2,>=1.0.0 in /usr/local/lib/python2.7/dist-packages (from tox>=3.13.1) (1.12.0)
Requirement already satisfied: pluggy<1,>=0.12.0 in /usr/local/lib/python2.7/dist-packages (from tox>=3.13.1) (0.12.0)
Requirement already satisfied: toml>=0.9.4 in /usr/local/lib/python2.7/dist-packages (from tox>=3.13.1) (0.10.0)
Requirement already satisfied: virtualenv>=14.0.0 in /usr/local/lib/python2.7/dist-packages (from tox>=3.13.1) (16.6.1)
Requirement already satisfied: py<2,>=1.4.17 in /usr/local/lib/python2.7/dist-packages (from tox>=3.13.1) (1.8.0)
Requirement already satisfied: importlib-metadata<1,>=0.12 in /usr/local/lib/python2.7/dist-packages (from tox>=3.13.1) (0.18)
Requirement already satisfied: filelock<4,>=3.0.0 in /usr/local/lib/python2.7/dist-packages (from tox>=3.13.1) (3.0.12)
Requirement already satisfied: pyparsing>=2.0.2 in /usr/local/lib/python2.7/dist-packages (from packaging>=14->tox>=3.13.1) (2.4.0)
Requirement already satisfied: contextlib2; python_version < "3" in /usr/local/lib/python2.7/dist-packages (from importlib-metadata<1,>=0.12->tox>=3.13.1) (0.5.5)
Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python2.7/dist-packages (from importlib-metadata<1,>=0.12->tox>=3.13.1) (0.5.1)
Requirement already satisfied: pathlib2; python_version == "3.4.*" or python_version < "3" in /usr/local/lib/python2.7/dist-packages (from importlib-metadata<1,>=0.12->tox>=3.13.1) (2.3.3)
Requirement already satisfied: configparser>=3.5; python_version < "3" in /usr/local/lib/python2.7/dist-packages (from importlib-metadata<1,>=0.12->tox>=3.13.1) (3.7.4)
Requirement already satisfied: scandir; python_version < "3.5" in /usr/local/lib/python2.7/dist-packages (from pathlib2; python_version == "3.4.*" or python_version < "3"->importlib-metadata<1,>=0.12->tox>=3.13.1) (1.10.0)
.tox finish: getenv /home/[REDACTED_PROJECT_PATH]/.tox/.tox after 24.97 seconds
.tox start: finishvenv 
write config to /home/[REDACTED_PROJECT_PATH]/.tox/.tox/.tox-config1 as 'fdfa6acc26b1a187ba86772f74812876 /usr/bin/python\n3.13.1 1 0 0\n00000000000000000000000000000000 tox >= 3.13.1'
.tox finish: finishvenv  after 0.02 seconds
.tox start: provision 
[28] /home/[REDACTED_PROJECT_PATH]$ /home/[REDACTED_PROJECT_PATH]/.tox/.tox/bin/python -m tox --sitepackages -rvv
using tox.ini: /home/[REDACTED_PROJECT_PATH]/tox.ini (pid 28)
  removing /home/[REDACTED_PROJECT_PATH]/.tox/log
could not satisfy requires MissingDependency(<Requirement('tox>=3.13.1')>,)
using tox-3.13.1 from /usr/local/lib/python2.7/dist-packages/tox/__init__.pyc (pid 28)
.tox start: getenv /home/[REDACTED_PROJECT_PATH]/.tox/.tox
.tox cannot reuse: -r flag
.tox recreate: /home/[REDACTED_PROJECT_PATH]/.tox/.tox
/home/[REDACTED_PROJECT_PATH]/.tox/.tox/bin/python (/home/[REDACTED_PROJECT_PATH]/.tox/.tox/bin/python) is {u'executable': u'/home/[REDACTED_PROJECT_PATH]/.tox/.tox/bin/python', u'name': u'python', u'version_info': [2, 7, 12, u'final', 0], u'sysplatform': u'linux2', u'version': u'2.7.12 (default, Nov 12 2018, 14:36:49) \n[GCC 5.4.0 20160609]', u'is_64': True}
.tox uses /home/[REDACTED_PROJECT_PATH]/.tox/.tox/bin/python
  removing /home/[REDACTED_PROJECT_PATH]/.tox/.tox
setting PATH=/home/[REDACTED_PROJECT_PATH]/.tox/.tox/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Traceback (most recent call last):
  File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/usr/local/lib/python2.7/dist-packages/tox/__main__.py", line 4, in <module>
    tox.cmdline()
  File "/usr/local/lib/python2.7/dist-packages/tox/session/__init__.py", line 44, in cmdline
    main(args)
  File "/usr/local/lib/python2.7/dist-packages/tox/session/__init__.py", line 68, in main
    exit_code = session.runcommand()
  File "/usr/local/lib/python2.7/dist-packages/tox/session/__init__.py", line 182, in runcommand
    return provision_tox(provision_tox_venv, self.config.args)
  File "/usr/local/lib/python2.7/dist-packages/tox/session/commands/provision.py", line 10, in provision_tox
    ensure_meta_env_up_to_date(provision_venv)
  File "/usr/local/lib/python2.7/dist-packages/tox/session/commands/provision.py", line 23, in ensure_meta_env_up_to_date
    if provision_venv.setupenv():
  File "/usr/local/lib/python2.7/dist-packages/tox/venv.py", line 594, in setupenv
    status = self.update(action=action)
  File "/usr/local/lib/python2.7/dist-packages/tox/venv.py", line 252, in update
    self.hook.tox_testenv_create(action=action, venv=self)
  File "/usr/local/lib/python2.7/dist-packages/pluggy/hooks.py", line 289, in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)
  File "/usr/local/lib/python2.7/dist-packages/pluggy/manager.py", line 87, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
  File "/usr/local/lib/python2.7/dist-packages/pluggy/manager.py", line 81, in <lambda>
    firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,
  File "/usr/local/lib/python2.7/dist-packages/pluggy/callers.py", line 208, in _multicall
    return outcome.get_result()
  File "/usr/local/lib/python2.7/dist-packages/pluggy/callers.py", line 81, in get_result
    _reraise(*ex)  # noqa
  File "/usr/local/lib/python2.7/dist-packages/pluggy/callers.py", line 187, in _multicall
    res = hook_impl.function(*args)
  File "/usr/local/lib/python2.7/dist-packages/tox/venv.py", line 687, in tox_testenv_create
    redirect=reporter.verbosity() < reporter.Verbosity.DEBUG,
  File "/usr/local/lib/python2.7/dist-packages/tox/venv.py", line 574, in _pcall
    report_fail=not is_test_command,
  File "/usr/local/lib/python2.7/dist-packages/tox/action.py", line 93, in popen
    else 0
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1342, in _execute_child
    child_exception = pickle.loads(data)
  File "/usr/lib/python2.7/pickle.py", line 1388, in loads
    return Unpickler(file).load()
  File "/usr/lib/python2.7/pickle.py", line 864, in load
    dispatch[key](self)
  File "/usr/lib/python2.7/pickle.py", line 977, in load_string
    self.append(rep.decode("string-escape"))
LookupError: unknown encoding: string-escape
.tox finish: provision  after 8.21 seconds
@lockefox lockefox added the bug:normal affects many people or has quite an impact label Jun 26, 2019
@obestwalter obestwalter added the needs:reproducer ideally a failing test marked as xfail. If that is not possible exact instructions to reproduce label Jun 27, 2019
@reialex1
Copy link

Same thing on my side, tox 3.13.0 and 3.13.1 are creating a ".tox/.tox/" folder, which makes tox to crash few steps later. I had to revert to 3.12.1 which is working properly.

@gaborbernat
Copy link
Member

Must be related some dependency of tox not being satisfied. we need to fix this, but in the meantime if you force reinstall dependencies should fix it for you👌

@gaborbernat
Copy link
Member

Definitely caused by #1328

@asottile asottile self-assigned this Jun 27, 2019
@asottile
Copy link
Contributor

I'll take a look at this one

@asottile
Copy link
Contributor

@lockefox you mentioned docker -- could you perhaps provide a Dockerfile reproducing the issue?

@gaborbernat
Copy link
Member

Guys, can you please provide output for tox -r -v -v? Thanks!

@asottile
Copy link
Contributor

asottile commented Jul 8, 2019

Is this fixed with 3.13.2?

@gaborbernat
Copy link
Member

Something I've been hitting still and is ultra annoying:

ERROR: cowardly refusing to delete envdir (it does not look like a virtualenv): /git/github/virtualenv/.tox/.package 👍

The magic feature for refusing to delete the envdir needs some fixing.

@asottile
Copy link
Contributor

asottile commented Jul 8, 2019

weird, what's inside of .tox/.package?

@gaborbernat
Copy link
Member

It's what we use to generate isolated builds, looks fine for me. Can we disable this check for anything inside the toxworkdir please?

.tox/.package
├── bin
│   ├── activate
│   ├── activate.csh
│   ├── activate.fish
│   ├── activate.ps1
│   ├── activate_this.py
│   ├── activate.xsh
│   ├── easy_install
│   ├── easy_install-3.8
│   ├── pip
│   ├── pip3
│   ├── pip3.8
│   ├── python
│   ├── python3 -> python
│   ├── python3.8 -> python
│   ├── python-config
│   └── wheel
├── lib
│   └── python3.8
│       ├── abc.py -> /usr/lib/python3.8/abc.py
│       ├── base64.py -> /usr/lib/python3.8/base64.py
│       ├── bisect.py -> /usr/lib/python3.8/bisect.py
│       ├── _bootlocale.py -> /usr/lib/python3.8/_bootlocale.py
│       ├── codecs.py -> /usr/lib/python3.8/codecs.py
│       ├── collections -> /usr/lib/python3.8/collections
│       ├── _collections_abc.py -> /usr/lib/python3.8/_collections_abc.py
│       ├── copy.py -> /usr/lib/python3.8/copy.py
│       ├── copyreg.py -> /usr/lib/python3.8/copyreg.py
│       ├── distutils
│       │   ├── distutils.cfg
│       │   ├── __init__.py
│       │   └── __pycache__
│       │       └── __init__.cpython-38.pyc
│       ├── _dummy_thread.py -> /usr/lib/python3.8/_dummy_thread.py
│       ├── encodings -> /usr/lib/python3.8/encodings
│       ├── enum.py -> /usr/lib/python3.8/enum.py
│       ├── fnmatch.py -> /usr/lib/python3.8/fnmatch.py
│       ├── functools.py -> /usr/lib/python3.8/functools.py
│       ├── __future__.py -> /usr/lib/python3.8/__future__.py
│       ├── genericpath.py -> /usr/lib/python3.8/genericpath.py
│       ├── hashlib.py -> /usr/lib/python3.8/hashlib.py
│       ├── heapq.py -> /usr/lib/python3.8/heapq.py
│       ├── hmac.py -> /usr/lib/python3.8/hmac.py
│       ├── importlib -> /usr/lib/python3.8/importlib
│       ├── imp.py -> /usr/lib/python3.8/imp.py
│       ├── io.py -> /usr/lib/python3.8/io.py
│       ├── keyword.py -> /usr/lib/python3.8/keyword.py
│       ├── lib-dynload -> /usr/lib/python3.8/lib-dynload
│       ├── LICENSE.txt -> /usr/lib/python3.8/LICENSE.txt
│       ├── linecache.py -> /usr/lib/python3.8/linecache.py
│       ├── locale.py -> /usr/lib/python3.8/locale.py
│       ├── no-global-site-packages.txt
│       ├── ntpath.py -> /usr/lib/python3.8/ntpath.py
│       ├── operator.py -> /usr/lib/python3.8/operator.py
│       ├── orig-prefix.txt
│       ├── os.py -> /usr/lib/python3.8/os.py
│       ├── posixpath.py -> /usr/lib/python3.8/posixpath.py
│       ├── __pycache__
│       │   ├── abc.cpython-38.pyc
│       │   ├── base64.cpython-38.pyc
│       │   ├── bisect.cpython-38.pyc
│       │   ├── _bootlocale.cpython-38.pyc
│       │   ├── codecs.cpython-38.pyc
│       │   ├── _collections_abc.cpython-38.pyc
│       │   ├── copy.cpython-38.pyc
│       │   ├── copyreg.cpython-38.pyc
│       │   ├── enum.cpython-38.pyc
│       │   ├── fnmatch.cpython-38.pyc
│       │   ├── functools.cpython-38.pyc
│       │   ├── __future__.cpython-38.pyc
│       │   ├── genericpath.cpython-38.pyc
│       │   ├── hashlib.cpython-38.pyc
│       │   ├── heapq.cpython-38.pyc
│       │   ├── hmac.cpython-38.pyc
│       │   ├── imp.cpython-38.pyc
│       │   ├── io.cpython-38.pyc
│       │   ├── keyword.cpython-38.pyc
│       │   ├── linecache.cpython-38.pyc
│       │   ├── locale.cpython-38.pyc
│       │   ├── ntpath.cpython-38.pyc
│       │   ├── operator.cpython-38.pyc
│       │   ├── os.cpython-38.pyc
│       │   ├── posixpath.cpython-38.pyc
│       │   ├── random.cpython-38.pyc
│       │   ├── re.cpython-38.pyc
│       │   ├── reprlib.cpython-38.pyc
│       │   ├── shutil.cpython-38.pyc
│       │   ├── site.cpython-38.pyc
│       │   ├── sre_compile.cpython-38.pyc
│       │   ├── sre_constants.cpython-38.pyc
│       │   ├── sre_parse.cpython-38.pyc
│       │   ├── stat.cpython-38.pyc
│       │   ├── struct.cpython-38.pyc
│       │   ├── tarfile.cpython-38.pyc
│       │   ├── tempfile.cpython-38.pyc
│       │   ├── token.cpython-38.pyc
│       │   ├── tokenize.cpython-38.pyc
│       │   ├── types.cpython-38.pyc
│       │   ├── warnings.cpython-38.pyc
│       │   ├── weakref.cpython-38.pyc
│       │   └── _weakrefset.cpython-38.pyc
│       ├── random.py -> /usr/lib/python3.8/random.py
│       ├── reprlib.py -> /usr/lib/python3.8/reprlib.py
│       ├── re.py -> /usr/lib/python3.8/re.py
│       ├── rlcompleter.py -> /usr/lib/python3.8/rlcompleter.py
│       ├── shutil.py -> /usr/lib/python3.8/shutil.py
│       ├── site-packages
│       │   ├── easy_install.py
│       │   ├── pip
│       │   │   ├── __init__.py
│       │   │   ├── _internal
│       │   │   │   ├── build_env.py
│       │   │   │   ├── cache.py
│       │   │   │   ├── cli
│       │   │   │   │   ├── autocompletion.py
│       │   │   │   │   ├── base_command.py
│       │   │   │   │   ├── cmdoptions.py
│       │   │   │   │   ├── __init__.py
│       │   │   │   │   ├── main_parser.py
│       │   │   │   │   ├── parser.py
│       │   │   │   │   ├── __pycache__
│       │   │   │   │   │   ├── autocompletion.cpython-38.pyc
│       │   │   │   │   │   ├── base_command.cpython-38.pyc
│       │   │   │   │   │   ├── cmdoptions.cpython-38.pyc
│       │   │   │   │   │   ├── __init__.cpython-38.pyc
│       │   │   │   │   │   ├── main_parser.cpython-38.pyc
│       │   │   │   │   │   ├── parser.cpython-38.pyc
│       │   │   │   │   │   └── status_codes.cpython-38.pyc
│       │   │   │   │   └── status_codes.py
│       │   │   │   ├── commands
│       │   │   │   │   ├── check.py
│       │   │   │   │   ├── completion.py
│       │   │   │   │   ├── configuration.py
│       │   │   │   │   ├── download.py
│       │   │   │   │   ├── freeze.py
│       │   │   │   │   ├── hash.py
│       │   │   │   │   ├── help.py
│       │   │   │   │   ├── __init__.py
│       │   │   │   │   ├── install.py
│       │   │   │   │   ├── list.py
│       │   │   │   │   ├── __pycache__
│       │   │   │   │   │   ├── check.cpython-38.pyc
│       │   │   │   │   │   ├── completion.cpython-38.pyc
│       │   │   │   │   │   ├── configuration.cpython-38.pyc
│       │   │   │   │   │   ├── download.cpython-38.pyc
│       │   │   │   │   │   ├── freeze.cpython-38.pyc
│       │   │   │   │   │   ├── hash.cpython-38.pyc
│       │   │   │   │   │   ├── help.cpython-38.pyc
│       │   │   │   │   │   ├── __init__.cpython-38.pyc
│       │   │   │   │   │   ├── install.cpython-38.pyc
│       │   │   │   │   │   ├── list.cpython-38.pyc
│       │   │   │   │   │   ├── search.cpython-38.pyc
│       │   │   │   │   │   ├── show.cpython-38.pyc
│       │   │   │   │   │   ├── uninstall.cpython-38.pyc
│       │   │   │   │   │   └── wheel.cpython-38.pyc
│       │   │   │   │   ├── search.py
│       │   │   │   │   ├── show.py
│       │   │   │   │   ├── uninstall.py
│       │   │   │   │   └── wheel.py
│       │   │   │   ├── configuration.py
│       │   │   │   ├── download.py
│       │   │   │   ├── exceptions.py
│       │   │   │   ├── index.py
│       │   │   │   ├── __init__.py
│       │   │   │   ├── locations.py
│       │   │   │   ├── models
│       │   │   │   │   ├── candidate.py
│       │   │   │   │   ├── format_control.py
│       │   │   │   │   ├── index.py
│       │   │   │   │   ├── __init__.py
│       │   │   │   │   ├── link.py
│       │   │   │   │   └── __pycache__
│       │   │   │   │       ├── candidate.cpython-38.pyc
│       │   │   │   │       ├── format_control.cpython-38.pyc
│       │   │   │   │       ├── index.cpython-38.pyc
│       │   │   │   │       ├── __init__.cpython-38.pyc
│       │   │   │   │       └── link.cpython-38.pyc
│       │   │   │   ├── operations
│       │   │   │   │   ├── check.py
│       │   │   │   │   ├── freeze.py
│       │   │   │   │   ├── __init__.py
│       │   │   │   │   ├── prepare.py
│       │   │   │   │   └── __pycache__
│       │   │   │   │       ├── check.cpython-38.pyc
│       │   │   │   │       ├── freeze.cpython-38.pyc
│       │   │   │   │       ├── __init__.cpython-38.pyc
│       │   │   │   │       └── prepare.cpython-38.pyc
│       │   │   │   ├── pep425tags.py
│       │   │   │   ├── __pycache__
│       │   │   │   │   ├── build_env.cpython-38.pyc
│       │   │   │   │   ├── cache.cpython-38.pyc
│       │   │   │   │   ├── configuration.cpython-38.pyc
│       │   │   │   │   ├── download.cpython-38.pyc
│       │   │   │   │   ├── exceptions.cpython-38.pyc
│       │   │   │   │   ├── index.cpython-38.pyc
│       │   │   │   │   ├── __init__.cpython-38.pyc
│       │   │   │   │   ├── locations.cpython-38.pyc
│       │   │   │   │   ├── pep425tags.cpython-38.pyc
│       │   │   │   │   ├── pyproject.cpython-38.pyc
│       │   │   │   │   ├── resolve.cpython-38.pyc
│       │   │   │   │   └── wheel.cpython-38.pyc
│       │   │   │   ├── pyproject.py
│       │   │   │   ├── req
│       │   │   │   │   ├── constructors.py
│       │   │   │   │   ├── __init__.py
│       │   │   │   │   ├── __pycache__
│       │   │   │   │   │   ├── constructors.cpython-38.pyc
│       │   │   │   │   │   ├── __init__.cpython-38.pyc
│       │   │   │   │   │   ├── req_file.cpython-38.pyc
│       │   │   │   │   │   ├── req_install.cpython-38.pyc
│       │   │   │   │   │   ├── req_set.cpython-38.pyc
│       │   │   │   │   │   ├── req_tracker.cpython-38.pyc
│       │   │   │   │   │   └── req_uninstall.cpython-38.pyc
│       │   │   │   │   ├── req_file.py
│       │   │   │   │   ├── req_install.py
│       │   │   │   │   ├── req_set.py
│       │   │   │   │   ├── req_tracker.py
│       │   │   │   │   └── req_uninstall.py
│       │   │   │   ├── resolve.py
│       │   │   │   ├── utils
│       │   │   │   │   ├── appdirs.py
│       │   │   │   │   ├── compat.py
│       │   │   │   │   ├── deprecation.py
│       │   │   │   │   ├── encoding.py
│       │   │   │   │   ├── filesystem.py
│       │   │   │   │   ├── glibc.py
│       │   │   │   │   ├── hashes.py
│       │   │   │   │   ├── __init__.py
│       │   │   │   │   ├── logging.py
│       │   │   │   │   ├── misc.py
│       │   │   │   │   ├── models.py
│       │   │   │   │   ├── outdated.py
│       │   │   │   │   ├── packaging.py
│       │   │   │   │   ├── __pycache__
│       │   │   │   │   │   ├── appdirs.cpython-38.pyc
│       │   │   │   │   │   ├── compat.cpython-38.pyc
│       │   │   │   │   │   ├── deprecation.cpython-38.pyc
│       │   │   │   │   │   ├── encoding.cpython-38.pyc
│       │   │   │   │   │   ├── filesystem.cpython-38.pyc
│       │   │   │   │   │   ├── glibc.cpython-38.pyc
│       │   │   │   │   │   ├── hashes.cpython-38.pyc
│       │   │   │   │   │   ├── __init__.cpython-38.pyc
│       │   │   │   │   │   ├── logging.cpython-38.pyc
│       │   │   │   │   │   ├── misc.cpython-38.pyc
│       │   │   │   │   │   ├── models.cpython-38.pyc
│       │   │   │   │   │   ├── outdated.cpython-38.pyc
│       │   │   │   │   │   ├── packaging.cpython-38.pyc
│       │   │   │   │   │   ├── setuptools_build.cpython-38.pyc
│       │   │   │   │   │   ├── temp_dir.cpython-38.pyc
│       │   │   │   │   │   ├── typing.cpython-38.pyc
│       │   │   │   │   │   └── ui.cpython-38.pyc
│       │   │   │   │   ├── setuptools_build.py
│       │   │   │   │   ├── temp_dir.py
│       │   │   │   │   ├── typing.py
│       │   │   │   │   └── ui.py
│       │   │   │   ├── vcs
│       │   │   │   │   ├── bazaar.py
│       │   │   │   │   ├── git.py
│       │   │   │   │   ├── __init__.py
│       │   │   │   │   ├── mercurial.py
│       │   │   │   │   ├── __pycache__
│       │   │   │   │   │   ├── bazaar.cpython-38.pyc
│       │   │   │   │   │   ├── git.cpython-38.pyc
│       │   │   │   │   │   ├── __init__.cpython-38.pyc
│       │   │   │   │   │   ├── mercurial.cpython-38.pyc
│       │   │   │   │   │   └── subversion.cpython-38.pyc
│       │   │   │   │   └── subversion.py
│       │   │   │   └── wheel.py
│       │   │   ├── __main__.py
│       │   │   ├── __pycache__
│       │   │   │   ├── __init__.cpython-38.pyc
│       │   │   │   └── __main__.cpython-38.pyc
│       │   │   └── _vendor
│       │   │       ├── appdirs.py
│       │   │       ├── cachecontrol
│       │   │       │   ├── adapter.py
│       │   │       │   ├── cache.py
│       │   │       │   ├── caches
│       │   │       │   │   ├── file_cache.py
│       │   │       │   │   ├── __init__.py
│       │   │       │   │   ├── __pycache__
│       │   │       │   │   │   ├── file_cache.cpython-38.pyc
│       │   │       │   │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   │   └── redis_cache.cpython-38.pyc
│       │   │       │   │   └── redis_cache.py
│       │   │       │   ├── _cmd.py
│       │   │       │   ├── compat.py
│       │   │       │   ├── controller.py
│       │   │       │   ├── filewrapper.py
│       │   │       │   ├── heuristics.py
│       │   │       │   ├── __init__.py
│       │   │       │   ├── __pycache__
│       │   │       │   │   ├── adapter.cpython-38.pyc
│       │   │       │   │   ├── cache.cpython-38.pyc
│       │   │       │   │   ├── _cmd.cpython-38.pyc
│       │   │       │   │   ├── compat.cpython-38.pyc
│       │   │       │   │   ├── controller.cpython-38.pyc
│       │   │       │   │   ├── filewrapper.cpython-38.pyc
│       │   │       │   │   ├── heuristics.cpython-38.pyc
│       │   │       │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   ├── serialize.cpython-38.pyc
│       │   │       │   │   └── wrapper.cpython-38.pyc
│       │   │       │   ├── serialize.py
│       │   │       │   └── wrapper.py
│       │   │       ├── certifi
│       │   │       │   ├── cacert.pem
│       │   │       │   ├── core.py
│       │   │       │   ├── __init__.py
│       │   │       │   ├── __main__.py
│       │   │       │   └── __pycache__
│       │   │       │       ├── core.cpython-38.pyc
│       │   │       │       ├── __init__.cpython-38.pyc
│       │   │       │       └── __main__.cpython-38.pyc
│       │   │       ├── chardet
│       │   │       │   ├── big5freq.py
│       │   │       │   ├── big5prober.py
│       │   │       │   ├── chardistribution.py
│       │   │       │   ├── charsetgroupprober.py
│       │   │       │   ├── charsetprober.py
│       │   │       │   ├── cli
│       │   │       │   │   ├── chardetect.py
│       │   │       │   │   ├── __init__.py
│       │   │       │   │   └── __pycache__
│       │   │       │   │       ├── chardetect.cpython-38.pyc
│       │   │       │   │       └── __init__.cpython-38.pyc
│       │   │       │   ├── codingstatemachine.py
│       │   │       │   ├── compat.py
│       │   │       │   ├── cp949prober.py
│       │   │       │   ├── enums.py
│       │   │       │   ├── escprober.py
│       │   │       │   ├── escsm.py
│       │   │       │   ├── eucjpprober.py
│       │   │       │   ├── euckrfreq.py
│       │   │       │   ├── euckrprober.py
│       │   │       │   ├── euctwfreq.py
│       │   │       │   ├── euctwprober.py
│       │   │       │   ├── gb2312freq.py
│       │   │       │   ├── gb2312prober.py
│       │   │       │   ├── hebrewprober.py
│       │   │       │   ├── __init__.py
│       │   │       │   ├── jisfreq.py
│       │   │       │   ├── jpcntx.py
│       │   │       │   ├── langbulgarianmodel.py
│       │   │       │   ├── langcyrillicmodel.py
│       │   │       │   ├── langgreekmodel.py
│       │   │       │   ├── langhebrewmodel.py
│       │   │       │   ├── langhungarianmodel.py
│       │   │       │   ├── langthaimodel.py
│       │   │       │   ├── langturkishmodel.py
│       │   │       │   ├── latin1prober.py
│       │   │       │   ├── mbcharsetprober.py
│       │   │       │   ├── mbcsgroupprober.py
│       │   │       │   ├── mbcssm.py
│       │   │       │   ├── __pycache__
│       │   │       │   │   ├── big5freq.cpython-38.pyc
│       │   │       │   │   ├── big5prober.cpython-38.pyc
│       │   │       │   │   ├── chardistribution.cpython-38.pyc
│       │   │       │   │   ├── charsetgroupprober.cpython-38.pyc
│       │   │       │   │   ├── charsetprober.cpython-38.pyc
│       │   │       │   │   ├── codingstatemachine.cpython-38.pyc
│       │   │       │   │   ├── compat.cpython-38.pyc
│       │   │       │   │   ├── cp949prober.cpython-38.pyc
│       │   │       │   │   ├── enums.cpython-38.pyc
│       │   │       │   │   ├── escprober.cpython-38.pyc
│       │   │       │   │   ├── escsm.cpython-38.pyc
│       │   │       │   │   ├── eucjpprober.cpython-38.pyc
│       │   │       │   │   ├── euckrfreq.cpython-38.pyc
│       │   │       │   │   ├── euckrprober.cpython-38.pyc
│       │   │       │   │   ├── euctwfreq.cpython-38.pyc
│       │   │       │   │   ├── euctwprober.cpython-38.pyc
│       │   │       │   │   ├── gb2312freq.cpython-38.pyc
│       │   │       │   │   ├── gb2312prober.cpython-38.pyc
│       │   │       │   │   ├── hebrewprober.cpython-38.pyc
│       │   │       │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   ├── jisfreq.cpython-38.pyc
│       │   │       │   │   ├── jpcntx.cpython-38.pyc
│       │   │       │   │   ├── langbulgarianmodel.cpython-38.pyc
│       │   │       │   │   ├── langcyrillicmodel.cpython-38.pyc
│       │   │       │   │   ├── langgreekmodel.cpython-38.pyc
│       │   │       │   │   ├── langhebrewmodel.cpython-38.pyc
│       │   │       │   │   ├── langhungarianmodel.cpython-38.pyc
│       │   │       │   │   ├── langthaimodel.cpython-38.pyc
│       │   │       │   │   ├── langturkishmodel.cpython-38.pyc
│       │   │       │   │   ├── latin1prober.cpython-38.pyc
│       │   │       │   │   ├── mbcharsetprober.cpython-38.pyc
│       │   │       │   │   ├── mbcsgroupprober.cpython-38.pyc
│       │   │       │   │   ├── mbcssm.cpython-38.pyc
│       │   │       │   │   ├── sbcharsetprober.cpython-38.pyc
│       │   │       │   │   ├── sbcsgroupprober.cpython-38.pyc
│       │   │       │   │   ├── sjisprober.cpython-38.pyc
│       │   │       │   │   ├── universaldetector.cpython-38.pyc
│       │   │       │   │   ├── utf8prober.cpython-38.pyc
│       │   │       │   │   └── version.cpython-38.pyc
│       │   │       │   ├── sbcharsetprober.py
│       │   │       │   ├── sbcsgroupprober.py
│       │   │       │   ├── sjisprober.py
│       │   │       │   ├── universaldetector.py
│       │   │       │   ├── utf8prober.py
│       │   │       │   └── version.py
│       │   │       ├── colorama
│       │   │       │   ├── ansi.py
│       │   │       │   ├── ansitowin32.py
│       │   │       │   ├── initialise.py
│       │   │       │   ├── __init__.py
│       │   │       │   ├── __pycache__
│       │   │       │   │   ├── ansi.cpython-38.pyc
│       │   │       │   │   ├── ansitowin32.cpython-38.pyc
│       │   │       │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   ├── initialise.cpython-38.pyc
│       │   │       │   │   ├── win32.cpython-38.pyc
│       │   │       │   │   └── winterm.cpython-38.pyc
│       │   │       │   ├── win32.py
│       │   │       │   └── winterm.py
│       │   │       ├── distlib
│       │   │       │   ├── _backport
│       │   │       │   │   ├── __init__.py
│       │   │       │   │   ├── misc.py
│       │   │       │   │   ├── __pycache__
│       │   │       │   │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   │   ├── misc.cpython-38.pyc
│       │   │       │   │   │   ├── shutil.cpython-38.pyc
│       │   │       │   │   │   ├── sysconfig.cpython-38.pyc
│       │   │       │   │   │   └── tarfile.cpython-38.pyc
│       │   │       │   │   ├── shutil.py
│       │   │       │   │   ├── sysconfig.cfg
│       │   │       │   │   ├── sysconfig.py
│       │   │       │   │   └── tarfile.py
│       │   │       │   ├── compat.py
│       │   │       │   ├── database.py
│       │   │       │   ├── index.py
│       │   │       │   ├── __init__.py
│       │   │       │   ├── locators.py
│       │   │       │   ├── manifest.py
│       │   │       │   ├── markers.py
│       │   │       │   ├── metadata.py
│       │   │       │   ├── __pycache__
│       │   │       │   │   ├── compat.cpython-38.pyc
│       │   │       │   │   ├── database.cpython-38.pyc
│       │   │       │   │   ├── index.cpython-38.pyc
│       │   │       │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   ├── locators.cpython-38.pyc
│       │   │       │   │   ├── manifest.cpython-38.pyc
│       │   │       │   │   ├── markers.cpython-38.pyc
│       │   │       │   │   ├── metadata.cpython-38.pyc
│       │   │       │   │   ├── resources.cpython-38.pyc
│       │   │       │   │   ├── scripts.cpython-38.pyc
│       │   │       │   │   ├── util.cpython-38.pyc
│       │   │       │   │   ├── version.cpython-38.pyc
│       │   │       │   │   └── wheel.cpython-38.pyc
│       │   │       │   ├── resources.py
│       │   │       │   ├── scripts.py
│       │   │       │   ├── t32.exe
│       │   │       │   ├── t64.exe
│       │   │       │   ├── util.py
│       │   │       │   ├── version.py
│       │   │       │   ├── w32.exe
│       │   │       │   ├── w64.exe
│       │   │       │   └── wheel.py
│       │   │       ├── distro.py
│       │   │       ├── html5lib
│       │   │       │   ├── constants.py
│       │   │       │   ├── filters
│       │   │       │   │   ├── alphabeticalattributes.py
│       │   │       │   │   ├── base.py
│       │   │       │   │   ├── __init__.py
│       │   │       │   │   ├── inject_meta_charset.py
│       │   │       │   │   ├── lint.py
│       │   │       │   │   ├── optionaltags.py
│       │   │       │   │   ├── __pycache__
│       │   │       │   │   │   ├── alphabeticalattributes.cpython-38.pyc
│       │   │       │   │   │   ├── base.cpython-38.pyc
│       │   │       │   │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   │   ├── inject_meta_charset.cpython-38.pyc
│       │   │       │   │   │   ├── lint.cpython-38.pyc
│       │   │       │   │   │   ├── optionaltags.cpython-38.pyc
│       │   │       │   │   │   ├── sanitizer.cpython-38.pyc
│       │   │       │   │   │   └── whitespace.cpython-38.pyc
│       │   │       │   │   ├── sanitizer.py
│       │   │       │   │   └── whitespace.py
│       │   │       │   ├── html5parser.py
│       │   │       │   ├── _ihatexml.py
│       │   │       │   ├── __init__.py
│       │   │       │   ├── _inputstream.py
│       │   │       │   ├── __pycache__
│       │   │       │   │   ├── constants.cpython-38.pyc
│       │   │       │   │   ├── html5parser.cpython-38.pyc
│       │   │       │   │   ├── _ihatexml.cpython-38.pyc
│       │   │       │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   ├── _inputstream.cpython-38.pyc
│       │   │       │   │   ├── serializer.cpython-38.pyc
│       │   │       │   │   ├── _tokenizer.cpython-38.pyc
│       │   │       │   │   └── _utils.cpython-38.pyc
│       │   │       │   ├── serializer.py
│       │   │       │   ├── _tokenizer.py
│       │   │       │   ├── treeadapters
│       │   │       │   │   ├── genshi.py
│       │   │       │   │   ├── __init__.py
│       │   │       │   │   ├── __pycache__
│       │   │       │   │   │   ├── genshi.cpython-38.pyc
│       │   │       │   │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   │   └── sax.cpython-38.pyc
│       │   │       │   │   └── sax.py
│       │   │       │   ├── treebuilders
│       │   │       │   │   ├── base.py
│       │   │       │   │   ├── dom.py
│       │   │       │   │   ├── etree_lxml.py
│       │   │       │   │   ├── etree.py
│       │   │       │   │   ├── __init__.py
│       │   │       │   │   └── __pycache__
│       │   │       │   │       ├── base.cpython-38.pyc
│       │   │       │   │       ├── dom.cpython-38.pyc
│       │   │       │   │       ├── etree.cpython-38.pyc
│       │   │       │   │       ├── etree_lxml.cpython-38.pyc
│       │   │       │   │       └── __init__.cpython-38.pyc
│       │   │       │   ├── treewalkers
│       │   │       │   │   ├── base.py
│       │   │       │   │   ├── dom.py
│       │   │       │   │   ├── etree_lxml.py
│       │   │       │   │   ├── etree.py
│       │   │       │   │   ├── genshi.py
│       │   │       │   │   ├── __init__.py
│       │   │       │   │   └── __pycache__
│       │   │       │   │       ├── base.cpython-38.pyc
│       │   │       │   │       ├── dom.cpython-38.pyc
│       │   │       │   │       ├── etree.cpython-38.pyc
│       │   │       │   │       ├── etree_lxml.cpython-38.pyc
│       │   │       │   │       ├── genshi.cpython-38.pyc
│       │   │       │   │       └── __init__.cpython-38.pyc
│       │   │       │   ├── _trie
│       │   │       │   │   ├── _base.py
│       │   │       │   │   ├── datrie.py
│       │   │       │   │   ├── __init__.py
│       │   │       │   │   ├── __pycache__
│       │   │       │   │   │   ├── _base.cpython-38.pyc
│       │   │       │   │   │   ├── datrie.cpython-38.pyc
│       │   │       │   │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   │   └── py.cpython-38.pyc
│       │   │       │   │   └── py.py
│       │   │       │   └── _utils.py
│       │   │       ├── idna
│       │   │       │   ├── codec.py
│       │   │       │   ├── compat.py
│       │   │       │   ├── core.py
│       │   │       │   ├── idnadata.py
│       │   │       │   ├── __init__.py
│       │   │       │   ├── intranges.py
│       │   │       │   ├── package_data.py
│       │   │       │   ├── __pycache__
│       │   │       │   │   ├── codec.cpython-38.pyc
│       │   │       │   │   ├── compat.cpython-38.pyc
│       │   │       │   │   ├── core.cpython-38.pyc
│       │   │       │   │   ├── idnadata.cpython-38.pyc
│       │   │       │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   ├── intranges.cpython-38.pyc
│       │   │       │   │   ├── package_data.cpython-38.pyc
│       │   │       │   │   └── uts46data.cpython-38.pyc
│       │   │       │   └── uts46data.py
│       │   │       ├── __init__.py
│       │   │       ├── ipaddress.py
│       │   │       ├── lockfile
│       │   │       │   ├── __init__.py
│       │   │       │   ├── linklockfile.py
│       │   │       │   ├── mkdirlockfile.py
│       │   │       │   ├── pidlockfile.py
│       │   │       │   ├── __pycache__
│       │   │       │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   ├── linklockfile.cpython-38.pyc
│       │   │       │   │   ├── mkdirlockfile.cpython-38.pyc
│       │   │       │   │   ├── pidlockfile.cpython-38.pyc
│       │   │       │   │   ├── sqlitelockfile.cpython-38.pyc
│       │   │       │   │   └── symlinklockfile.cpython-38.pyc
│       │   │       │   ├── sqlitelockfile.py
│       │   │       │   └── symlinklockfile.py
│       │   │       ├── msgpack
│       │   │       │   ├── exceptions.py
│       │   │       │   ├── fallback.py
│       │   │       │   ├── __init__.py
│       │   │       │   ├── __pycache__
│       │   │       │   │   ├── exceptions.cpython-38.pyc
│       │   │       │   │   ├── fallback.cpython-38.pyc
│       │   │       │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   └── _version.cpython-38.pyc
│       │   │       │   └── _version.py
│       │   │       ├── packaging
│       │   │       │   ├── __about__.py
│       │   │       │   ├── _compat.py
│       │   │       │   ├── __init__.py
│       │   │       │   ├── markers.py
│       │   │       │   ├── __pycache__
│       │   │       │   │   ├── __about__.cpython-38.pyc
│       │   │       │   │   ├── _compat.cpython-38.pyc
│       │   │       │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   ├── markers.cpython-38.pyc
│       │   │       │   │   ├── requirements.cpython-38.pyc
│       │   │       │   │   ├── specifiers.cpython-38.pyc
│       │   │       │   │   ├── _structures.cpython-38.pyc
│       │   │       │   │   ├── utils.cpython-38.pyc
│       │   │       │   │   └── version.cpython-38.pyc
│       │   │       │   ├── requirements.py
│       │   │       │   ├── specifiers.py
│       │   │       │   ├── _structures.py
│       │   │       │   ├── utils.py
│       │   │       │   └── version.py
│       │   │       ├── pep517
│       │   │       │   ├── build.py
│       │   │       │   ├── check.py
│       │   │       │   ├── colorlog.py
│       │   │       │   ├── compat.py
│       │   │       │   ├── envbuild.py
│       │   │       │   ├── __init__.py
│       │   │       │   ├── _in_process.py
│       │   │       │   ├── __pycache__
│       │   │       │   │   ├── build.cpython-38.pyc
│       │   │       │   │   ├── check.cpython-38.pyc
│       │   │       │   │   ├── colorlog.cpython-38.pyc
│       │   │       │   │   ├── compat.cpython-38.pyc
│       │   │       │   │   ├── envbuild.cpython-38.pyc
│       │   │       │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   ├── _in_process.cpython-38.pyc
│       │   │       │   │   └── wrappers.cpython-38.pyc
│       │   │       │   └── wrappers.py
│       │   │       ├── pkg_resources
│       │   │       │   ├── __init__.py
│       │   │       │   ├── py31compat.py
│       │   │       │   └── __pycache__
│       │   │       │       ├── __init__.cpython-38.pyc
│       │   │       │       └── py31compat.cpython-38.pyc
│       │   │       ├── progress
│       │   │       │   ├── bar.py
│       │   │       │   ├── counter.py
│       │   │       │   ├── __init__.py
│       │   │       │   ├── __pycache__
│       │   │       │   │   ├── bar.cpython-38.pyc
│       │   │       │   │   ├── counter.cpython-38.pyc
│       │   │       │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   └── spinner.cpython-38.pyc
│       │   │       │   └── spinner.py
│       │   │       ├── __pycache__
│       │   │       │   ├── appdirs.cpython-38.pyc
│       │   │       │   ├── distro.cpython-38.pyc
│       │   │       │   ├── __init__.cpython-38.pyc
│       │   │       │   ├── ipaddress.cpython-38.pyc
│       │   │       │   ├── pyparsing.cpython-38.pyc
│       │   │       │   ├── retrying.cpython-38.pyc
│       │   │       │   └── six.cpython-38.pyc
│       │   │       ├── pyparsing.py
│       │   │       ├── pytoml
│       │   │       │   ├── core.py
│       │   │       │   ├── __init__.py
│       │   │       │   ├── parser.py
│       │   │       │   ├── __pycache__
│       │   │       │   │   ├── core.cpython-38.pyc
│       │   │       │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   ├── parser.cpython-38.pyc
│       │   │       │   │   ├── test.cpython-38.pyc
│       │   │       │   │   ├── utils.cpython-38.pyc
│       │   │       │   │   └── writer.cpython-38.pyc
│       │   │       │   ├── test.py
│       │   │       │   ├── utils.py
│       │   │       │   └── writer.py
│       │   │       ├── requests
│       │   │       │   ├── adapters.py
│       │   │       │   ├── api.py
│       │   │       │   ├── auth.py
│       │   │       │   ├── certs.py
│       │   │       │   ├── compat.py
│       │   │       │   ├── cookies.py
│       │   │       │   ├── exceptions.py
│       │   │       │   ├── help.py
│       │   │       │   ├── hooks.py
│       │   │       │   ├── __init__.py
│       │   │       │   ├── _internal_utils.py
│       │   │       │   ├── models.py
│       │   │       │   ├── packages.py
│       │   │       │   ├── __pycache__
│       │   │       │   │   ├── adapters.cpython-38.pyc
│       │   │       │   │   ├── api.cpython-38.pyc
│       │   │       │   │   ├── auth.cpython-38.pyc
│       │   │       │   │   ├── certs.cpython-38.pyc
│       │   │       │   │   ├── compat.cpython-38.pyc
│       │   │       │   │   ├── cookies.cpython-38.pyc
│       │   │       │   │   ├── exceptions.cpython-38.pyc
│       │   │       │   │   ├── help.cpython-38.pyc
│       │   │       │   │   ├── hooks.cpython-38.pyc
│       │   │       │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   ├── _internal_utils.cpython-38.pyc
│       │   │       │   │   ├── models.cpython-38.pyc
│       │   │       │   │   ├── packages.cpython-38.pyc
│       │   │       │   │   ├── sessions.cpython-38.pyc
│       │   │       │   │   ├── status_codes.cpython-38.pyc
│       │   │       │   │   ├── structures.cpython-38.pyc
│       │   │       │   │   ├── utils.cpython-38.pyc
│       │   │       │   │   └── __version__.cpython-38.pyc
│       │   │       │   ├── sessions.py
│       │   │       │   ├── status_codes.py
│       │   │       │   ├── structures.py
│       │   │       │   ├── utils.py
│       │   │       │   └── __version__.py
│       │   │       ├── retrying.py
│       │   │       ├── six.py
│       │   │       ├── urllib3
│       │   │       │   ├── _collections.py
│       │   │       │   ├── connectionpool.py
│       │   │       │   ├── connection.py
│       │   │       │   ├── contrib
│       │   │       │   │   ├── _appengine_environ.py
│       │   │       │   │   ├── appengine.py
│       │   │       │   │   ├── __init__.py
│       │   │       │   │   ├── ntlmpool.py
│       │   │       │   │   ├── __pycache__
│       │   │       │   │   │   ├── appengine.cpython-38.pyc
│       │   │       │   │   │   ├── _appengine_environ.cpython-38.pyc
│       │   │       │   │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   │   ├── ntlmpool.cpython-38.pyc
│       │   │       │   │   │   ├── pyopenssl.cpython-38.pyc
│       │   │       │   │   │   ├── securetransport.cpython-38.pyc
│       │   │       │   │   │   └── socks.cpython-38.pyc
│       │   │       │   │   ├── pyopenssl.py
│       │   │       │   │   ├── _securetransport
│       │   │       │   │   │   ├── bindings.py
│       │   │       │   │   │   ├── __init__.py
│       │   │       │   │   │   ├── low_level.py
│       │   │       │   │   │   └── __pycache__
│       │   │       │   │   │       ├── bindings.cpython-38.pyc
│       │   │       │   │   │       ├── __init__.cpython-38.pyc
│       │   │       │   │   │       └── low_level.cpython-38.pyc
│       │   │       │   │   ├── securetransport.py
│       │   │       │   │   └── socks.py
│       │   │       │   ├── exceptions.py
│       │   │       │   ├── fields.py
│       │   │       │   ├── filepost.py
│       │   │       │   ├── __init__.py
│       │   │       │   ├── packages
│       │   │       │   │   ├── backports
│       │   │       │   │   │   ├── __init__.py
│       │   │       │   │   │   ├── makefile.py
│       │   │       │   │   │   └── __pycache__
│       │   │       │   │   │       ├── __init__.cpython-38.pyc
│       │   │       │   │   │       └── makefile.cpython-38.pyc
│       │   │       │   │   ├── __init__.py
│       │   │       │   │   ├── __pycache__
│       │   │       │   │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   │   └── six.cpython-38.pyc
│       │   │       │   │   ├── six.py
│       │   │       │   │   └── ssl_match_hostname
│       │   │       │   │       ├── _implementation.py
│       │   │       │   │       ├── __init__.py
│       │   │       │   │       └── __pycache__
│       │   │       │   │           ├── _implementation.cpython-38.pyc
│       │   │       │   │           └── __init__.cpython-38.pyc
│       │   │       │   ├── poolmanager.py
│       │   │       │   ├── __pycache__
│       │   │       │   │   ├── _collections.cpython-38.pyc
│       │   │       │   │   ├── connection.cpython-38.pyc
│       │   │       │   │   ├── connectionpool.cpython-38.pyc
│       │   │       │   │   ├── exceptions.cpython-38.pyc
│       │   │       │   │   ├── fields.cpython-38.pyc
│       │   │       │   │   ├── filepost.cpython-38.pyc
│       │   │       │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   ├── poolmanager.cpython-38.pyc
│       │   │       │   │   ├── request.cpython-38.pyc
│       │   │       │   │   └── response.cpython-38.pyc
│       │   │       │   ├── request.py
│       │   │       │   ├── response.py
│       │   │       │   └── util
│       │   │       │       ├── connection.py
│       │   │       │       ├── __init__.py
│       │   │       │       ├── __pycache__
│       │   │       │       │   ├── connection.cpython-38.pyc
│       │   │       │       │   ├── __init__.cpython-38.pyc
│       │   │       │       │   ├── queue.cpython-38.pyc
│       │   │       │       │   ├── request.cpython-38.pyc
│       │   │       │       │   ├── response.cpython-38.pyc
│       │   │       │       │   ├── retry.cpython-38.pyc
│       │   │       │       │   ├── ssl_.cpython-38.pyc
│       │   │       │       │   ├── timeout.cpython-38.pyc
│       │   │       │       │   ├── url.cpython-38.pyc
│       │   │       │       │   └── wait.cpython-38.pyc
│       │   │       │       ├── queue.py
│       │   │       │       ├── request.py
│       │   │       │       ├── response.py
│       │   │       │       ├── retry.py
│       │   │       │       ├── ssl_.py
│       │   │       │       ├── timeout.py
│       │   │       │       ├── url.py
│       │   │       │       └── wait.py
│       │   │       └── webencodings
│       │   │           ├── __init__.py
│       │   │           ├── labels.py
│       │   │           ├── mklabels.py
│       │   │           ├── __pycache__
│       │   │           │   ├── __init__.cpython-38.pyc
│       │   │           │   ├── labels.cpython-38.pyc
│       │   │           │   ├── mklabels.cpython-38.pyc
│       │   │           │   ├── tests.cpython-38.pyc
│       │   │           │   └── x_user_defined.cpython-38.pyc
│       │   │           ├── tests.py
│       │   │           └── x_user_defined.py
│       │   ├── pip-19.1.1.dist-info
│       │   │   ├── entry_points.txt
│       │   │   ├── INSTALLER
│       │   │   ├── LICENSE.txt
│       │   │   ├── METADATA
│       │   │   ├── RECORD
│       │   │   ├── top_level.txt
│       │   │   └── WHEEL
│       │   ├── pkg_resources
│       │   │   ├── extern
│       │   │   │   ├── __init__.py
│       │   │   │   └── __pycache__
│       │   │   │       └── __init__.cpython-38.pyc
│       │   │   ├── __init__.py
│       │   │   ├── py31compat.py
│       │   │   ├── __pycache__
│       │   │   │   ├── __init__.cpython-38.pyc
│       │   │   │   └── py31compat.cpython-38.pyc
│       │   │   └── _vendor
│       │   │       ├── appdirs.py
│       │   │       ├── __init__.py
│       │   │       ├── packaging
│       │   │       │   ├── __about__.py
│       │   │       │   ├── _compat.py
│       │   │       │   ├── __init__.py
│       │   │       │   ├── markers.py
│       │   │       │   ├── __pycache__
│       │   │       │   │   ├── __about__.cpython-38.pyc
│       │   │       │   │   ├── _compat.cpython-38.pyc
│       │   │       │   │   ├── __init__.cpython-38.pyc
│       │   │       │   │   ├── markers.cpython-38.pyc
│       │   │       │   │   ├── requirements.cpython-38.pyc
│       │   │       │   │   ├── specifiers.cpython-38.pyc
│       │   │       │   │   ├── _structures.cpython-38.pyc
│       │   │       │   │   ├── utils.cpython-38.pyc
│       │   │       │   │   └── version.cpython-38.pyc
│       │   │       │   ├── requirements.py
│       │   │       │   ├── specifiers.py
│       │   │       │   ├── _structures.py
│       │   │       │   ├── utils.py
│       │   │       │   └── version.py
│       │   │       ├── __pycache__
│       │   │       │   ├── appdirs.cpython-38.pyc
│       │   │       │   ├── __init__.cpython-38.pyc
│       │   │       │   ├── pyparsing.cpython-38.pyc
│       │   │       │   └── six.cpython-38.pyc
│       │   │       ├── pyparsing.py
│       │   │       └── six.py
│       │   ├── __pycache__
│       │   │   └── easy_install.cpython-38.pyc
│       │   ├── setuptools
│       │   │   ├── archive_util.py
│       │   │   ├── build_meta.py
│       │   │   ├── cli-32.exe
│       │   │   ├── cli-64.exe
│       │   │   ├── cli.exe
│       │   │   ├── command
│       │   │   │   ├── alias.py
│       │   │   │   ├── bdist_egg.py
│       │   │   │   ├── bdist_rpm.py
│       │   │   │   ├── bdist_wininst.py
│       │   │   │   ├── build_clib.py
│       │   │   │   ├── build_ext.py
│       │   │   │   ├── build_py.py
│       │   │   │   ├── develop.py
│       │   │   │   ├── dist_info.py
│       │   │   │   ├── easy_install.py
│       │   │   │   ├── egg_info.py
│       │   │   │   ├── __init__.py
│       │   │   │   ├── install_egg_info.py
│       │   │   │   ├── install_lib.py
│       │   │   │   ├── install.py
│       │   │   │   ├── install_scripts.py
│       │   │   │   ├── launcher manifest.xml
│       │   │   │   ├── py36compat.py
│       │   │   │   ├── __pycache__
│       │   │   │   │   ├── alias.cpython-38.pyc
│       │   │   │   │   ├── bdist_egg.cpython-38.pyc
│       │   │   │   │   ├── bdist_rpm.cpython-38.pyc
│       │   │   │   │   ├── bdist_wininst.cpython-38.pyc
│       │   │   │   │   ├── build_clib.cpython-38.pyc
│       │   │   │   │   ├── build_ext.cpython-38.pyc
│       │   │   │   │   ├── build_py.cpython-38.pyc
│       │   │   │   │   ├── develop.cpython-38.pyc
│       │   │   │   │   ├── dist_info.cpython-38.pyc
│       │   │   │   │   ├── easy_install.cpython-38.pyc
│       │   │   │   │   ├── egg_info.cpython-38.pyc
│       │   │   │   │   ├── __init__.cpython-38.pyc
│       │   │   │   │   ├── install.cpython-38.pyc
│       │   │   │   │   ├── install_egg_info.cpython-38.pyc
│       │   │   │   │   ├── install_lib.cpython-38.pyc
│       │   │   │   │   ├── install_scripts.cpython-38.pyc
│       │   │   │   │   ├── py36compat.cpython-38.pyc
│       │   │   │   │   ├── register.cpython-38.pyc
│       │   │   │   │   ├── rotate.cpython-38.pyc
│       │   │   │   │   ├── saveopts.cpython-38.pyc
│       │   │   │   │   ├── sdist.cpython-38.pyc
│       │   │   │   │   ├── setopt.cpython-38.pyc
│       │   │   │   │   ├── test.cpython-38.pyc
│       │   │   │   │   ├── upload.cpython-38.pyc
│       │   │   │   │   └── upload_docs.cpython-38.pyc
│       │   │   │   ├── register.py
│       │   │   │   ├── rotate.py
│       │   │   │   ├── saveopts.py
│       │   │   │   ├── sdist.py
│       │   │   │   ├── setopt.py
│       │   │   │   ├── test.py
│       │   │   │   ├── upload_docs.py
│       │   │   │   └── upload.py
│       │   │   ├── config.py
│       │   │   ├── depends.py
│       │   │   ├── _deprecation_warning.py
│       │   │   ├── dep_util.py
│       │   │   ├── dist.py
│       │   │   ├── extension.py
│       │   │   ├── extern
│       │   │   │   ├── __init__.py
│       │   │   │   └── __pycache__
│       │   │   │       └── __init__.cpython-38.pyc
│       │   │   ├── glibc.py
│       │   │   ├── glob.py
│       │   │   ├── gui-32.exe
│       │   │   ├── gui-64.exe
│       │   │   ├── gui.exe
│       │   │   ├── __init__.py
│       │   │   ├── launch.py
│       │   │   ├── lib2to3_ex.py
│       │   │   ├── monkey.py
│       │   │   ├── msvc.py
│       │   │   ├── namespaces.py
│       │   │   ├── package_index.py
│       │   │   ├── pep425tags.py
│       │   │   ├── py27compat.py
│       │   │   ├── py31compat.py
│       │   │   ├── py33compat.py
│       │   │   ├── __pycache__
│       │   │   │   ├── archive_util.cpython-38.pyc
│       │   │   │   ├── build_meta.cpython-38.pyc
│       │   │   │   ├── config.cpython-38.pyc
│       │   │   │   ├── depends.cpython-38.pyc
│       │   │   │   ├── _deprecation_warning.cpython-38.pyc
│       │   │   │   ├── dep_util.cpython-38.pyc
│       │   │   │   ├── dist.cpython-38.pyc
│       │   │   │   ├── extension.cpython-38.pyc
│       │   │   │   ├── glibc.cpython-38.pyc
│       │   │   │   ├── glob.cpython-38.pyc
│       │   │   │   ├── __init__.cpython-38.pyc
│       │   │   │   ├── launch.cpython-38.pyc
│       │   │   │   ├── lib2to3_ex.cpython-38.pyc
│       │   │   │   ├── monkey.cpython-38.pyc
│       │   │   │   ├── msvc.cpython-38.pyc
│       │   │   │   ├── namespaces.cpython-38.pyc
│       │   │   │   ├── package_index.cpython-38.pyc
│       │   │   │   ├── pep425tags.cpython-38.pyc
│       │   │   │   ├── py27compat.cpython-38.pyc
│       │   │   │   ├── py31compat.cpython-38.pyc
│       │   │   │   ├── py33compat.cpython-38.pyc
│       │   │   │   ├── sandbox.cpython-38.pyc
│       │   │   │   ├── site-patch.cpython-38.pyc
│       │   │   │   ├── ssl_support.cpython-38.pyc
│       │   │   │   ├── unicode_utils.cpython-38.pyc
│       │   │   │   ├── version.cpython-38.pyc
│       │   │   │   ├── wheel.cpython-38.pyc
│       │   │   │   └── windows_support.cpython-38.pyc
│       │   │   ├── sandbox.py
│       │   │   ├── script (dev).tmpl
│       │   │   ├── script.tmpl
│       │   │   ├── site-patch.py
│       │   │   ├── ssl_support.py
│       │   │   ├── unicode_utils.py
│       │   │   ├── _vendor
│       │   │   │   ├── __init__.py
│       │   │   │   ├── packaging
│       │   │   │   │   ├── __about__.py
│       │   │   │   │   ├── _compat.py
│       │   │   │   │   ├── __init__.py
│       │   │   │   │   ├── markers.py
│       │   │   │   │   ├── __pycache__
│       │   │   │   │   │   ├── __about__.cpython-38.pyc
│       │   │   │   │   │   ├── _compat.cpython-38.pyc
│       │   │   │   │   │   ├── __init__.cpython-38.pyc
│       │   │   │   │   │   ├── markers.cpython-38.pyc
│       │   │   │   │   │   ├── requirements.cpython-38.pyc
│       │   │   │   │   │   ├── specifiers.cpython-38.pyc
│       │   │   │   │   │   ├── _structures.cpython-38.pyc
│       │   │   │   │   │   ├── utils.cpython-38.pyc
│       │   │   │   │   │   └── version.cpython-38.pyc
│       │   │   │   │   ├── requirements.py
│       │   │   │   │   ├── specifiers.py
│       │   │   │   │   ├── _structures.py
│       │   │   │   │   ├── utils.py
│       │   │   │   │   └── version.py
│       │   │   │   ├── __pycache__
│       │   │   │   │   ├── __init__.cpython-38.pyc
│       │   │   │   │   ├── pyparsing.cpython-38.pyc
│       │   │   │   │   └── six.cpython-38.pyc
│       │   │   │   ├── pyparsing.py
│       │   │   │   └── six.py
│       │   │   ├── version.py
│       │   │   ├── wheel.py
│       │   │   └── windows_support.py
│       │   ├── setuptools-41.0.1.dist-info
│       │   │   ├── dependency_links.txt
│       │   │   ├── entry_points.txt
│       │   │   ├── INSTALLER
│       │   │   ├── LICENSE
│       │   │   ├── METADATA
│       │   │   ├── RECORD
│       │   │   ├── top_level.txt
│       │   │   ├── WHEEL
│       │   │   └── zip-safe
│       │   ├── setuptools_scm
│       │   │   ├── config.py
│       │   │   ├── discover.py
│       │   │   ├── file_finder_git.py
│       │   │   ├── file_finder_hg.py
│       │   │   ├── file_finder.py
│       │   │   ├── git.py
│       │   │   ├── hacks.py
│       │   │   ├── hg.py
│       │   │   ├── __init__.py
│       │   │   ├── integration.py
│       │   │   ├── __main__.py
│       │   │   ├── __pycache__
│       │   │   │   ├── config.cpython-38.pyc
│       │   │   │   ├── discover.cpython-38.pyc
│       │   │   │   ├── file_finder.cpython-38.pyc
│       │   │   │   ├── file_finder_git.cpython-38.pyc
│       │   │   │   ├── file_finder_hg.cpython-38.pyc
│       │   │   │   ├── git.cpython-38.pyc
│       │   │   │   ├── hacks.cpython-38.pyc
│       │   │   │   ├── hg.cpython-38.pyc
│       │   │   │   ├── __init__.cpython-38.pyc
│       │   │   │   ├── integration.cpython-38.pyc
│       │   │   │   ├── __main__.cpython-38.pyc
│       │   │   │   ├── utils.cpython-38.pyc
│       │   │   │   ├── version.cpython-38.pyc
│       │   │   │   └── win_py31_compat.cpython-38.pyc
│       │   │   ├── utils.py
│       │   │   ├── version.py
│       │   │   └── win_py31_compat.py
│       │   ├── setuptools_scm-3.3.3.dist-info
│       │   │   ├── entry_points.txt
│       │   │   ├── INSTALLER
│       │   │   ├── LICENSE
│       │   │   ├── METADATA
│       │   │   ├── RECORD
│       │   │   ├── top_level.txt
│       │   │   ├── WHEEL
│       │   │   └── zip-safe
│       │   ├── wheel
│       │   │   ├── bdist_wheel.py
│       │   │   ├── cli
│       │   │   │   ├── convert.py
│       │   │   │   ├── __init__.py
│       │   │   │   ├── pack.py
│       │   │   │   ├── __pycache__
│       │   │   │   │   ├── convert.cpython-38.pyc
│       │   │   │   │   ├── __init__.cpython-38.pyc
│       │   │   │   │   ├── pack.cpython-38.pyc
│       │   │   │   │   └── unpack.cpython-38.pyc
│       │   │   │   └── unpack.py
│       │   │   ├── __init__.py
│       │   │   ├── __main__.py
│       │   │   ├── metadata.py
│       │   │   ├── pep425tags.py
│       │   │   ├── pkginfo.py
│       │   │   ├── __pycache__
│       │   │   │   ├── bdist_wheel.cpython-38.pyc
│       │   │   │   ├── __init__.cpython-38.pyc
│       │   │   │   ├── __main__.cpython-38.pyc
│       │   │   │   ├── metadata.cpython-38.pyc
│       │   │   │   ├── pep425tags.cpython-38.pyc
│       │   │   │   ├── pkginfo.cpython-38.pyc
│       │   │   │   ├── util.cpython-38.pyc
│       │   │   │   └── wheelfile.cpython-38.pyc
│       │   │   ├── util.py
│       │   │   └── wheelfile.py
│       │   └── wheel-0.33.4.dist-info
│       │       ├── entry_points.txt
│       │       ├── INSTALLER
│       │       ├── LICENSE.txt
│       │       ├── METADATA
│       │       ├── RECORD
│       │       ├── top_level.txt
│       │       └── WHEEL
│       ├── site.py
│       ├── sre_compile.py -> /usr/lib/python3.8/sre_compile.py
│       ├── sre_constants.py -> /usr/lib/python3.8/sre_constants.py
│       ├── sre_parse.py -> /usr/lib/python3.8/sre_parse.py
│       ├── stat.py -> /usr/lib/python3.8/stat.py
│       ├── struct.py -> /usr/lib/python3.8/struct.py
│       ├── tarfile.py -> /usr/lib/python3.8/tarfile.py
│       ├── tempfile.py -> /usr/lib/python3.8/tempfile.py
│       ├── tokenize.py -> /usr/lib/python3.8/tokenize.py
│       ├── token.py -> /usr/lib/python3.8/token.py
│       ├── types.py -> /usr/lib/python3.8/types.py
│       ├── warnings.py -> /usr/lib/python3.8/warnings.py
│       ├── weakref.py -> /usr/lib/python3.8/weakref.py
│       └── _weakrefset.py -> /usr/lib/python3.8/_weakrefset.py
└── log

123 directories, 976 files

@asottile
Copy link
Contributor

asottile commented Jul 8, 2019

Can we disable this check for anything inside the toxworkdir please?

I don't think we should disable it even for that, for instance it found a bug when someone was clobbering .tox/dist -- we should figure out why it isn't happy about that .package env though -- it looks like it should be fine

seems especially useful to keep it on if we find bugs like this :P

@gaborbernat
Copy link
Member

Why is

or dir_items > {"bin", "lib"}
> rather than >=, so if we only have bin and lib we refuse to delete? What else are we expecting to be in there?

@asottile
Copy link
Contributor

asottile commented Jul 8, 2019

probably just an oversight -- though I'm also seeing include in my environments

@gaborbernat
Copy link
Member

I think that is a CPython thing 👍 😄 I mean in case of Jython/IronPython include does not make much sense 🤔

@asottile
Copy link
Contributor

asottile commented Jul 8, 2019

should probably have >= for all three of those cases 🤷‍♂️

@joaomcteixeira
Copy link

Hello,
I have faced the same issue with v.3.14.0 when using requires = tox-env.

.tox create: /home/joao/GitHub/sampleproject/.tox/.tox
.tox installdeps: tox-conda, tox-env, tox >= 3.4.0

when disabled requires = tox-env everything seems to flow.

@michaelaye
Copy link

Other packages in my conda env use importlib_metadata > 1, does tox really absolutely need it to be < 1 ? A conda install toxcurrently wants to downgrade my importlib_metadata from 1.3.0 to 0.23?

@asottile
Copy link
Contributor

@michaelaye that has nothing to do with this particular issue I'm afraid

that said, it has already been relaxed if you look at master: #1476

@tox-dev tox-dev locked and limited conversation to collaborators Jan 14, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug:normal affects many people or has quite an impact needs:reproducer ideally a failing test marked as xfail. If that is not possible exact instructions to reproduce
Projects
None yet
Development

No branches or pull requests

7 participants