This project is archived. Its data is read-only.
Mixing of pathlib and pathlib2
*importlib_metadata* mixes *pathlib* and *pathlib2* on python <=3.5 if both are installed. If both *pathlib* and *pathlib2* are installed on a python distribution <= 3.5, then the test suite passes Path objects of *pathlib* to functions of *pathlib2*. The issue manifests itself when running the test suite in the form of the following error ``` ====================================================================== ERROR: test_distribution_at_pathlib (importlib_metadata.tests.test_api.OffSysPathTests) Demonstrate how to load metadata direct from a directory. ---------------------------------------------------------------------- Traceback (most recent call last): File ".../importlib_metadata/tests/test_api.py", line 170, in test_distribution_at_pathlib dist = Distribution.at(dist_info_path) File ".../importlib_metadata/__init__.py", line 222, in at return PathDistribution(pathlib.Path(path)) File "/usr/lib64/python2.7/site-packages/pathlib2/__init__.py", line 1192, in new self = cls._from_parts(args, init=False) File "/usr/lib64/python2.7/site-packages/pathlib2/__init__.py", line 848, in from_parts drv, root, parts = self._parse_args(args) File "/usr/lib64/python2.7/site-packages/pathlib2/_init__.py", line 840, in _parse_args % type(a)) TypeError: argument should be a str object or an os.PathLike object returning str, not <class 'pathlib.PosixPath'> ---------------------------------------------------------------------- ``` I spare you the code analysis and just point out the imports: `importlib_metadata/tests/fixtures.py`: ``` try: import pathlib except ImportError: import pathlib2 as pathlib ``` `importlib_metadata/_compat.py`: ``` if sys.version_info > (3, 5): # pragma: nocover import pathlib else: # pragma: nocover import pathlib2 as pathlib ``` Making these imports consistent (preferably using the version of `_compat.py`) solves the issue. And while we are at it: These imports (*pathlib* on python >3.5, *pathlib2* on python<=3.5) do not coincide with the advertised dependencies in setup.cfg: ``` python_requires = >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.* install_requires = zipp>=0.5 pathlib2; python_version < '3' contextlib2; python_version < '3' ``` Note: I haven't done any analysis with respect to *contextlib* and *contextlib2*. So maybe there is another mixup hiding.
issue