rrthomas / psutils

Utilities for manipulating PostScript documents
GNU General Public License v3.0
39 stars 11 forks source link

Does not support Python 3.8 #53

Closed kloczek closed 2 months ago

kloczek commented 1 year ago

I'm packaging your module as an rpm package so I'm using the typical PEP517 based build, install and test cycle used on building packages from non-root account.

Here is pytest output:

```console + PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/psutils-3.0.6-2.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/psutils-3.0.6-2.fc35.x86_64/usr/lib/python3.8/site-packages + /usr/bin/pytest -ra -m 'not network' ============================= test session starts ============================== platform linux -- Python 3.8.17, pytest-7.4.0, pluggy-1.0.0 rootdir: /home/tkloczko/rpmbuild/BUILD/psutils-3.0.6 collected 0 items / 9 errors ==================================== ERRORS ==================================== ____________________ ERROR collecting tests/test_epsffit.py ____________________ /usr/lib/python3.8/site-packages/_pytest/runner.py:341: in from_call result: Optional[TResult] = func() /usr/lib/python3.8/site-packages/_pytest/runner.py:372: in call = CallInfo.from_call(lambda: list(collector.collect()), "collect") /usr/lib/python3.8/site-packages/_pytest/python.py:536: in collect self._inject_setup_module_fixture() /usr/lib/python3.8/site-packages/_pytest/python.py:550: in _inject_setup_module_fixture self.obj, ("setUpModule", "setup_module") /usr/lib/python3.8/site-packages/_pytest/python.py:315: in obj self._obj = obj = self._getobj() /usr/lib/python3.8/site-packages/_pytest/python.py:533: in _getobj return self._importtestmodule() /usr/lib/python3.8/site-packages/_pytest/python.py:622: in _importtestmodule mod = import_path(self.path, mode=importmode, root=self.config.rootpath) /usr/lib/python3.8/site-packages/_pytest/pathlib.py:565: in import_path importlib.import_module(module_name) /usr/lib64/python3.8/importlib/__init__.py:127: in import_module return _bootstrap._gcd_import(name[level:], package, level) :1014: in _gcd_import ??? :991: in _find_and_load ??? :975: in _find_and_load_unlocked ??? :671: in _load_unlocked ??? /usr/lib/python3.8/site-packages/_pytest/assertion/rewrite.py:178: in exec_module exec(co, module.__dict__) tests/test_epsffit.py:7: in from testutils import file_test, make_tests, Case tests/testutils.py:22: in def chdir(path: os.PathLike[str]) -> Iterator[None]: E TypeError: 'ABCMeta' object is not subscriptable __________________ ERROR collecting tests/test_extractres.py ___________________ /usr/lib/python3.8/site-packages/_pytest/runner.py:341: in from_call result: Optional[TResult] = func() /usr/lib/python3.8/site-packages/_pytest/runner.py:372: in call = CallInfo.from_call(lambda: list(collector.collect()), "collect") /usr/lib/python3.8/site-packages/_pytest/python.py:536: in collect self._inject_setup_module_fixture() /usr/lib/python3.8/site-packages/_pytest/python.py:550: in _inject_setup_module_fixture self.obj, ("setUpModule", "setup_module") /usr/lib/python3.8/site-packages/_pytest/python.py:315: in obj self._obj = obj = self._getobj() /usr/lib/python3.8/site-packages/_pytest/python.py:533: in _getobj return self._importtestmodule() /usr/lib/python3.8/site-packages/_pytest/python.py:622: in _importtestmodule mod = import_path(self.path, mode=importmode, root=self.config.rootpath) /usr/lib/python3.8/site-packages/_pytest/pathlib.py:565: in import_path importlib.import_module(module_name) /usr/lib64/python3.8/importlib/__init__.py:127: in import_module return _bootstrap._gcd_import(name[level:], package, level) :1014: in _gcd_import ??? :991: in _find_and_load ??? :975: in _find_and_load_unlocked ??? :671: in _load_unlocked ??? /usr/lib/python3.8/site-packages/_pytest/assertion/rewrite.py:178: in exec_module exec(co, module.__dict__) tests/test_extractres.py:5: in from testutils import file_test, compare_text_files, Case, GeneratedInput tests/testutils.py:22: in def chdir(path: os.PathLike[str]) -> Iterator[None]: E TypeError: 'ABCMeta' object is not subscriptable __________________ ERROR collecting tests/test_includeres.py ___________________ /usr/lib/python3.8/site-packages/_pytest/runner.py:341: in from_call result: Optional[TResult] = func() /usr/lib/python3.8/site-packages/_pytest/runner.py:372: in call = CallInfo.from_call(lambda: list(collector.collect()), "collect") /usr/lib/python3.8/site-packages/_pytest/python.py:536: in collect self._inject_setup_module_fixture() /usr/lib/python3.8/site-packages/_pytest/python.py:550: in _inject_setup_module_fixture self.obj, ("setUpModule", "setup_module") /usr/lib/python3.8/site-packages/_pytest/python.py:315: in obj self._obj = obj = self._getobj() /usr/lib/python3.8/site-packages/_pytest/python.py:533: in _getobj return self._importtestmodule() /usr/lib/python3.8/site-packages/_pytest/python.py:622: in _importtestmodule mod = import_path(self.path, mode=importmode, root=self.config.rootpath) /usr/lib/python3.8/site-packages/_pytest/pathlib.py:565: in import_path importlib.import_module(module_name) /usr/lib64/python3.8/importlib/__init__.py:127: in import_module return _bootstrap._gcd_import(name[level:], package, level) :1014: in _gcd_import ??? :991: in _find_and_load ??? :975: in _find_and_load_unlocked ??? :671: in _load_unlocked ??? /usr/lib/python3.8/site-packages/_pytest/assertion/rewrite.py:178: in exec_module exec(co, module.__dict__) tests/test_includeres.py:6: in from testutils import file_test, make_tests, Case tests/testutils.py:22: in def chdir(path: os.PathLike[str]) -> Iterator[None]: E TypeError: 'ABCMeta' object is not subscriptable ____________________ ERROR collecting tests/test_psbook.py _____________________ /usr/lib/python3.8/site-packages/_pytest/runner.py:341: in from_call result: Optional[TResult] = func() /usr/lib/python3.8/site-packages/_pytest/runner.py:372: in call = CallInfo.from_call(lambda: list(collector.collect()), "collect") /usr/lib/python3.8/site-packages/_pytest/python.py:536: in collect self._inject_setup_module_fixture() /usr/lib/python3.8/site-packages/_pytest/python.py:550: in _inject_setup_module_fixture self.obj, ("setUpModule", "setup_module") /usr/lib/python3.8/site-packages/_pytest/python.py:315: in obj self._obj = obj = self._getobj() /usr/lib/python3.8/site-packages/_pytest/python.py:533: in _getobj return self._importtestmodule() /usr/lib/python3.8/site-packages/_pytest/python.py:622: in _importtestmodule mod = import_path(self.path, mode=importmode, root=self.config.rootpath) /usr/lib/python3.8/site-packages/_pytest/pathlib.py:565: in import_path importlib.import_module(module_name) /usr/lib64/python3.8/importlib/__init__.py:127: in import_module return _bootstrap._gcd_import(name[level:], package, level) :1014: in _gcd_import ??? :991: in _find_and_load ??? :975: in _find_and_load_unlocked ??? :671: in _load_unlocked ??? /usr/lib/python3.8/site-packages/_pytest/assertion/rewrite.py:178: in exec_module exec(co, module.__dict__) tests/test_psbook.py:3: in from testutils import file_test, make_tests, Case, GeneratedInput tests/testutils.py:22: in def chdir(path: os.PathLike[str]) -> Iterator[None]: E TypeError: 'ABCMeta' object is not subscriptable ____________________ ERROR collecting tests/test_psjoin.py _____________________ /usr/lib/python3.8/site-packages/_pytest/runner.py:341: in from_call result: Optional[TResult] = func() /usr/lib/python3.8/site-packages/_pytest/runner.py:372: in call = CallInfo.from_call(lambda: list(collector.collect()), "collect") /usr/lib/python3.8/site-packages/_pytest/python.py:536: in collect self._inject_setup_module_fixture() /usr/lib/python3.8/site-packages/_pytest/python.py:550: in _inject_setup_module_fixture self.obj, ("setUpModule", "setup_module") /usr/lib/python3.8/site-packages/_pytest/python.py:315: in obj self._obj = obj = self._getobj() /usr/lib/python3.8/site-packages/_pytest/python.py:533: in _getobj return self._importtestmodule() /usr/lib/python3.8/site-packages/_pytest/python.py:622: in _importtestmodule mod = import_path(self.path, mode=importmode, root=self.config.rootpath) /usr/lib/python3.8/site-packages/_pytest/pathlib.py:565: in import_path importlib.import_module(module_name) /usr/lib64/python3.8/importlib/__init__.py:127: in import_module return _bootstrap._gcd_import(name[level:], package, level) :1014: in _gcd_import ??? :991: in _find_and_load ??? :975: in _find_and_load_unlocked ??? :671: in _load_unlocked ??? /usr/lib/python3.8/site-packages/_pytest/assertion/rewrite.py:178: in exec_module exec(co, module.__dict__) tests/test_psjoin.py:5: in from testutils import make_tests, file_test, Case, GeneratedInput tests/testutils.py:22: in def chdir(path: os.PathLike[str]) -> Iterator[None]: E TypeError: 'ABCMeta' object is not subscriptable _____________________ ERROR collecting tests/test_psnup.py _____________________ /usr/lib/python3.8/site-packages/_pytest/runner.py:341: in from_call result: Optional[TResult] = func() /usr/lib/python3.8/site-packages/_pytest/runner.py:372: in call = CallInfo.from_call(lambda: list(collector.collect()), "collect") /usr/lib/python3.8/site-packages/_pytest/python.py:536: in collect self._inject_setup_module_fixture() /usr/lib/python3.8/site-packages/_pytest/python.py:550: in _inject_setup_module_fixture self.obj, ("setUpModule", "setup_module") /usr/lib/python3.8/site-packages/_pytest/python.py:315: in obj self._obj = obj = self._getobj() /usr/lib/python3.8/site-packages/_pytest/python.py:533: in _getobj return self._importtestmodule() /usr/lib/python3.8/site-packages/_pytest/python.py:622: in _importtestmodule mod = import_path(self.path, mode=importmode, root=self.config.rootpath) /usr/lib/python3.8/site-packages/_pytest/pathlib.py:565: in import_path importlib.import_module(module_name) /usr/lib64/python3.8/importlib/__init__.py:127: in import_module return _bootstrap._gcd_import(name[level:], package, level) :1014: in _gcd_import ??? :991: in _find_and_load ??? :975: in _find_and_load_unlocked ??? :671: in _load_unlocked ??? /usr/lib/python3.8/site-packages/_pytest/assertion/rewrite.py:178: in exec_module exec(co, module.__dict__) tests/test_psnup.py:4: in from testutils import file_test, make_tests, Case, GeneratedInput tests/testutils.py:22: in def chdir(path: os.PathLike[str]) -> Iterator[None]: E TypeError: 'ABCMeta' object is not subscriptable ___________________ ERROR collecting tests/test_psresize.py ____________________ /usr/lib/python3.8/site-packages/_pytest/runner.py:341: in from_call result: Optional[TResult] = func() /usr/lib/python3.8/site-packages/_pytest/runner.py:372: in call = CallInfo.from_call(lambda: list(collector.collect()), "collect") /usr/lib/python3.8/site-packages/_pytest/python.py:536: in collect self._inject_setup_module_fixture() /usr/lib/python3.8/site-packages/_pytest/python.py:550: in _inject_setup_module_fixture self.obj, ("setUpModule", "setup_module") /usr/lib/python3.8/site-packages/_pytest/python.py:315: in obj self._obj = obj = self._getobj() /usr/lib/python3.8/site-packages/_pytest/python.py:533: in _getobj return self._importtestmodule() /usr/lib/python3.8/site-packages/_pytest/python.py:622: in _importtestmodule mod = import_path(self.path, mode=importmode, root=self.config.rootpath) /usr/lib/python3.8/site-packages/_pytest/pathlib.py:565: in import_path importlib.import_module(module_name) /usr/lib64/python3.8/importlib/__init__.py:127: in import_module return _bootstrap._gcd_import(name[level:], package, level) :1014: in _gcd_import ??? :991: in _find_and_load ??? :975: in _find_and_load_unlocked ??? :671: in _load_unlocked ??? /usr/lib/python3.8/site-packages/_pytest/assertion/rewrite.py:178: in exec_module exec(co, module.__dict__) tests/test_psresize.py:3: in from testutils import file_test, make_tests, Case, GeneratedInput tests/testutils.py:22: in def chdir(path: os.PathLike[str]) -> Iterator[None]: E TypeError: 'ABCMeta' object is not subscriptable ___________________ ERROR collecting tests/test_psselect.py ____________________ /usr/lib/python3.8/site-packages/_pytest/runner.py:341: in from_call result: Optional[TResult] = func() /usr/lib/python3.8/site-packages/_pytest/runner.py:372: in call = CallInfo.from_call(lambda: list(collector.collect()), "collect") /usr/lib/python3.8/site-packages/_pytest/python.py:536: in collect self._inject_setup_module_fixture() /usr/lib/python3.8/site-packages/_pytest/python.py:550: in _inject_setup_module_fixture self.obj, ("setUpModule", "setup_module") /usr/lib/python3.8/site-packages/_pytest/python.py:315: in obj self._obj = obj = self._getobj() /usr/lib/python3.8/site-packages/_pytest/python.py:533: in _getobj return self._importtestmodule() /usr/lib/python3.8/site-packages/_pytest/python.py:622: in _importtestmodule mod = import_path(self.path, mode=importmode, root=self.config.rootpath) /usr/lib/python3.8/site-packages/_pytest/pathlib.py:565: in import_path importlib.import_module(module_name) /usr/lib64/python3.8/importlib/__init__.py:127: in import_module return _bootstrap._gcd_import(name[level:], package, level) :1014: in _gcd_import ??? :991: in _find_and_load ??? :975: in _find_and_load_unlocked ??? :671: in _load_unlocked ??? /usr/lib/python3.8/site-packages/_pytest/assertion/rewrite.py:178: in exec_module exec(co, module.__dict__) tests/test_psselect.py:3: in from testutils import file_test, make_tests, Case, GeneratedInput tests/testutils.py:22: in def chdir(path: os.PathLike[str]) -> Iterator[None]: E TypeError: 'ABCMeta' object is not subscriptable ____________________ ERROR collecting tests/test_pstops.py _____________________ /usr/lib/python3.8/site-packages/_pytest/runner.py:341: in from_call result: Optional[TResult] = func() /usr/lib/python3.8/site-packages/_pytest/runner.py:372: in call = CallInfo.from_call(lambda: list(collector.collect()), "collect") /usr/lib/python3.8/site-packages/_pytest/python.py:536: in collect self._inject_setup_module_fixture() /usr/lib/python3.8/site-packages/_pytest/python.py:550: in _inject_setup_module_fixture self.obj, ("setUpModule", "setup_module") /usr/lib/python3.8/site-packages/_pytest/python.py:315: in obj self._obj = obj = self._getobj() /usr/lib/python3.8/site-packages/_pytest/python.py:533: in _getobj return self._importtestmodule() /usr/lib/python3.8/site-packages/_pytest/python.py:622: in _importtestmodule mod = import_path(self.path, mode=importmode, root=self.config.rootpath) /usr/lib/python3.8/site-packages/_pytest/pathlib.py:565: in import_path importlib.import_module(module_name) /usr/lib64/python3.8/importlib/__init__.py:127: in import_module return _bootstrap._gcd_import(name[level:], package, level) :1014: in _gcd_import ??? :991: in _find_and_load ??? :975: in _find_and_load_unlocked ??? :671: in _load_unlocked ??? /usr/lib/python3.8/site-packages/_pytest/assertion/rewrite.py:178: in exec_module exec(co, module.__dict__) tests/test_pstops.py:5: in from testutils import file_test, make_tests, Case, GeneratedInput tests/testutils.py:22: in def chdir(path: os.PathLike[str]) -> Iterator[None]: E TypeError: 'ABCMeta' object is not subscriptable =========================== short test summary info ============================ ERROR tests/test_epsffit.py - TypeError: 'ABCMeta' object is not subscriptable ERROR tests/test_extractres.py - TypeError: 'ABCMeta' object is not subscript... ERROR tests/test_includeres.py - TypeError: 'ABCMeta' object is not subscript... ERROR tests/test_psbook.py - TypeError: 'ABCMeta' object is not subscriptable ERROR tests/test_psjoin.py - TypeError: 'ABCMeta' object is not subscriptable ERROR tests/test_psnup.py - TypeError: 'ABCMeta' object is not subscriptable ERROR tests/test_psresize.py - TypeError: 'ABCMeta' object is not subscriptable ERROR tests/test_psselect.py - TypeError: 'ABCMeta' object is not subscriptable ERROR tests/test_pstops.py - TypeError: 'ABCMeta' object is not subscriptable !!!!!!!!!!!!!!!!!!! Interrupted: 9 errors during collection !!!!!!!!!!!!!!!!!!!! ============================== 9 errors in 1.38s =============================== ```

Here is list of installed modules in build env

```console Package Version ----------------------------- ------- alabaster 0.7.13 argparse-manpage 4.3 asttokens 2.2.1 Babel 2.12.1 backcall 0.2.0 build 0.10.0 charset-normalizer 3.1.0 decorator 5.1.1 distro 1.8.0 docutils 0.19 exceptiongroup 1.1.1 executing 1.2.0 gpg 1.20.0 idna 3.4 imagesize 1.4.1 importlib-metadata 6.7.0 iniconfig 2.0.0 installer 0.7.0 ipython 8.12.0 jedi 0.18.2 Jinja2 3.1.2 libcomps 0.1.19 MarkupSafe 2.1.2 matplotlib-inline 0.1.6 maturin 1.1.0 packaging 23.1 parso 0.8.3 pexpect 4.8.0 pickleshare 0.7.5 pluggy 1.0.0 prompt-toolkit 3.0.38 ptyprocess 0.7.0 pure-eval 0.2.2 puremagic 1.15 Pygments 2.15.1 pyproject_hooks 1.0.0 pytest 7.4.0 pytest-datafiles 3.0.0 python-dateutil 2.8.2 pytz 2023.2 requests 2.31.0 setuptools 68.0.0 six 1.16.0 snowballstemmer 2.2.0 Sphinx 6.2.1 sphinxcontrib-applehelp 1.0.4 sphinxcontrib-devhelp 1.0.2 sphinxcontrib-htmlhelp 2.0.0 sphinxcontrib-jsmath 1.0.1 sphinxcontrib-qthelp 1.0.3 sphinxcontrib-serializinghtml 1.1.5 stack-data 0.6.2 tomli 2.0.1 traitlets 5.9.0 typing_extensions 4.7.1 urllib3 1.26.15 wcwidth 0.2.6 wheel 0.40.0 zipp 3.15.0 ```
rrthomas commented 1 year ago

As per pyproject.toml:

requires-python = ">= 3.9"

I would be happy to get a patch for Python 3.8, given that it remains in support for over a year from now.

kloczek commented 1 year ago

If it is only matter of use python 3>=3.9 than OK .. don't worry and feel free to close this ticket because I'm now in the process of moving to python 3.9 😋 Thank you 👍

rrthomas commented 1 year ago

Thanks, @kloczek, I'll keep the issue open for now in case anyone else runs into it.

kloczek commented 10 months ago

BTW looks like some bits are missing in pyproject.toml. I've accidentally created temporary directory and than build failed. Here is test case:

```console + cd psutils-3.3.2 + mkdir temp + /usr/bin/python3 -sBm build -w --no-isolation * Getting build dependencies for wheel... error: Multiple top-level packages discovered in a flat-layout: ['psutils', 'temp`]. To avoid accidental inclusion of unwanted files or directories, setuptools will not proceed with this build. If you are trying to create a single distribution with multiple packages on purpose, you should not rely on automatic discovery. Instead, consider the following options: 1. set up custom discovery (`find` directive with `include` or `exclude`) 2. use a `src-layout` 3. explicitly set `py_modules` or `packages` with a list of names To find more information, look for "package discovery" on setuptools docs. ERROR Backend subprocess exited when trying to invoke get_requires_for_build_wheel ```
rrthomas commented 10 months ago

From the error message, this looks like things are working as intended: the package uses automatic discovery, and creating a temporary directory breaks that.

kloczek commented 10 months ago

Yes exactly and it is really hard to find modules which uses auto discovery. I have +1.2k packaged python modules and in mean time I made the test on all ow them and found that only 4 are affected by this kind of issue.

rrthomas commented 10 months ago

I don't think it's really an issue; on the contrary it's good that this package is simple enough that I can just rely on the defaults and avoid unnecessary extra configuration. It's increasingly uncommon to modify source directories, building out-of-tree is increasingly common, and in this case the error message was clear and obvious, so I don't think there's a problem.

rrthomas commented 2 months ago

Closing this issue, as Python 3.8 is nearly EOL and I'm not going to support it now.