ancient-france-42909
08/19/2022, 7:09 PMpylint
. We have a lot of apps and for some in particular, when I run ./pants --changed-since=foo lint
(which for this PR runs it on all the repo, since I changed every BUILD file) I get a lot of nonsensical errors, like complaints about modules not having members they definitely should have. This only runs on the CI, since it’d take forever on my mac, but I thought I could debug it by trying to lint the file, however… When I do that, it doesn’t happen. Even if I try to lint the whole directory. This seems to be related to namespace packages. The simplest example is we have a folder called audit
in which we have several packages, one of them being lib
. So in audit/lib
we have a BUILD file and then the sources are in audit/lib/src/audit/lib/
(with another BUILD in audit/lib/src/
) and tests in audit/lib/tests/
. When we run it on the CI:
audit/lib/tests/unit/test_validate_event.py:73:24: E1101: Module 'audit' has no 'lib' member (no-member)
And, yes, the tests depend on "audit/lib/src:lib"
. However, as I said, when I just run pylint locally on audit/
, I don’t get this problem. I’m really at a loss at how I can debug this. Also, this problem appeared (presumably) after updating from 2.6 to 2.12 and is still present in 2.13, but it could just be that this PR runs against a lot of targets and that’s related somehow. Any ideas?enough-analyst-54434
08/19/2022, 7:17 PM--keep-sandboxes=on_failure
. That will print out the path of a /tmp dir you can examine. It contains a __run.sh
script at the root that models what the Pants Rust engine actually executes. That should shed light on things.enough-analyst-54434
08/19/2022, 7:17 PMhundreds-father-404
08/19/2022, 7:18 PMhundreds-father-404
08/19/2022, 7:19 PMancient-france-42909
08/19/2022, 7:19 PMhundreds-father-404
08/19/2022, 7:20 PM./pants lint --only=pylint ::
? The namespace packages clue is a good one, I believe users have had issues with Pylint before with this. iirc Pylint doesn't like when Pants runs on all namespaces together, and often without Pants people run Pylint on smaller packages-at-a-timeenough-analyst-54434
08/19/2022, 7:20 PM__run.sh
script - you know the results already - it's examining the layout of files.ancient-france-42909
08/19/2022, 7:21 PMhundreds-father-404
08/19/2022, 7:23 PMiirc Pylint doesn't like when Pants runs on all namespaces together, and often without Pants people run Pylint on smaller packages-at-a-timeI think in the past folks have debugged by running on a single Pylint file, vs only one namespace package, vs everything.
./pants --changed-since=<foo> list
could be informative to see which of those 3 categories your command is falling intoenough-analyst-54434
08/19/2022, 7:23 PM/tmp/pants-sandbox-*
so they could grab the failed sandboxes and share.enough-analyst-54434
08/19/2022, 7:24 PMancient-france-42909
08/19/2022, 7:28 PMenough-analyst-54434
08/19/2022, 7:33 PMancient-france-42909
08/19/2022, 7:52 PMancient-france-42909
08/19/2022, 7:53 PMancient-france-42909
08/19/2022, 7:57 PM--changed-since
, I got the same errors with just filtering by a tag and ::
ancient-france-42909
08/19/2022, 7:57 PM--keep-sandboxes=on_failure
😞hundreds-father-404
08/19/2022, 8:00 PMancient-france-42909
08/19/2022, 8:01 PMlint audit
ancient-france-42909
08/19/2022, 8:05 PM./pylint_runner.pex_pex_shim.sh
from the sandboxancient-france-42909
08/19/2022, 8:06 PMancient-france-42909
08/19/2022, 8:08 PMancient-france-42909
08/19/2022, 8:08 PM>>> import audit.post.health
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/private/var/folders/_j/1pch58t96g7d7sk4t4dp7qxm0000gp/T/pants-sandbox-LAoavj/audit/post/src/audit/post/health.py", line 3, in <module>
from <http://aio.app|aio.app> import run_app
ModuleNotFoundError: No module named 'aio'
>>>
ancient-france-42909
08/19/2022, 8:08 PMhundreds-father-404
08/19/2022, 8:09 PMancient-france-42909
08/19/2022, 8:11 PMancient-france-42909
08/19/2022, 8:12 PMaio
in there, <http://audit.post|audit.post>
has aio:lib
in the dependenciesancient-france-42909
08/19/2022, 8:13 PMancient-france-42909
08/19/2022, 8:14 PMancient-france-42909
08/19/2022, 8:15 PM<http://audit.post|audit.post>
as a package that is actually in audit/post/src/audit/post/
ancient-france-42909
08/19/2022, 8:15 PM<http://audit.post|audit.post>
in the root there, it will failancient-france-42909
08/19/2022, 8:17 PMhundreds-father-404
08/19/2022, 8:30 PMancient-france-42909
08/19/2022, 8:31 PMancient-france-42909
08/19/2022, 8:31 PMancient-france-42909
08/19/2022, 8:33 PMfoo
in which you have a few packages. The code that should be copied shouldn’t be in foo
, it should be whatever the packages have inside.enough-analyst-54434
08/19/2022, 8:35 PMenough-analyst-54434
08/19/2022, 8:36 PMancient-france-42909
08/19/2022, 8:36 PMancient-france-42909
08/19/2022, 8:37 PMancient-france-42909
08/19/2022, 8:38 PM./pants roots
?ancient-france-42909
08/19/2022, 8:38 PMancient-france-42909
08/19/2022, 8:40 PM$ ./pants roots | grep ^audit
audit/lib
audit/lib/src
audit/post
audit/post/src
audit/store
audit/store/src
audit/view
audit/view/src
In this case, the non src versions are just used for testsenough-analyst-54434
08/19/2022, 8:48 PM./pants roots
looks correct (the entries are what you need to sys.path
to import things), then that at least is sorted.enough-analyst-54434
08/19/2022, 8:49 PMancient-france-42909
08/19/2022, 8:50 PMenough-analyst-54434
08/19/2022, 8:50 PMancient-france-42909
08/19/2022, 8:51 PMenough-analyst-54434
08/19/2022, 8:51 PMenough-analyst-54434
08/19/2022, 8:52 PMPEX_EXTRA_SYS_PATH
accounting for this?ancient-france-42909
08/19/2022, 9:01 PMPYTHONPATH
ancient-france-42909
08/19/2022, 9:04 PMenough-analyst-54434
08/19/2022, 9:09 PMancient-france-42909
08/19/2022, 9:10 PM2.13.0rc1
, but we had it with 2.12.0
as wellenough-analyst-54434
08/19/2022, 9:10 PMancient-france-42909
08/19/2022, 9:10 PM$ ./pylint_runner.pex_pex_shim.sh audit/post/src/audit/post/main.py
************* Module post.main
audit/post/src/audit/post/main.py:25:43: E1101: Module '<http://audit.post|audit.post>' has no 'health' member (no-member)
But then, after exporting PYTHONPATH
:
$ pylint audit/post/src/audit/post/main.py
************* Module post.main
audit/post/src/audit/post/main.py:71:4: E1101: Module 'asyncio' has no 'run' member (no-member)
ancient-france-42909
08/19/2022, 9:10 PMancient-france-42909
08/19/2022, 9:11 PMenough-analyst-54434
08/19/2022, 9:11 PMancient-france-42909
08/19/2022, 9:12 PMenough-analyst-54434
08/19/2022, 9:12 PMenough-analyst-54434
08/19/2022, 9:13 PMenough-analyst-54434
08/19/2022, 9:14 PM$ ./pylint_runner.pex_pex_shim.sh audit/post/src/audit/post/main.py
? The __run.sh script does this when it runs that pex, but you look like you're running the PEX directly in your snip above.ancient-france-42909
08/19/2022, 9:14 PMenough-analyst-54434
08/19/2022, 9:15 PMancient-france-42909
08/19/2022, 9:15 PMancient-france-42909
08/19/2022, 9:15 PMancient-france-42909
08/19/2022, 9:19 PMenough-analyst-54434
08/19/2022, 9:20 PM__run.sh
what happens - good things or bad things?ancient-france-42909
08/19/2022, 9:20 PMancient-france-42909
08/19/2022, 9:22 PM(crpython-3.7) ip-10-42-1-179:pants-sandbox-LAoavj user$ ./pylint_runner.pex_pex_shim.sh audit/post/src/audit/post/main.py
--------------------------------------------------------------------
Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00)
(crpython-3.7) ip-10-42-1-179:pants-sandbox-LAoavj user$ ./pylint_runner.pex_pex_shim.sh $'--rcfile=.pylintrc' $'--jobs=6' architect/themis/themis/config/config_definer.py architect/themis/themis/exceptions.py architect/themis/themis/extractors.py architect/themis/themis/main.py architect/themis/themis/models.py architect/themis/themis/parameters.py architect/themis/themis/template_filters.py architect/themis/themis/utils.py armiger/armiger/__init__.py armiger/armiger/config/__init__.py armiger/armiger/config/config_definer.py armiger/armiger/db.py armiger/armiger/lib/__init__.py armiger/armiger/lib/payload.py armiger/armiger/main.py armiger/armiger/metrics.py armiger/tests/integration/test_process_architect_breaches_prevented.py armiger/tests/integration/test_process_payload.py armiger/tests/integration/test_processor_integration.py armiger/tests/unit/lib/test_payload.py armiger/tests/unit/test_processor.py audit/lib/tests/unit/test_meta_schemas.py audit/lib/tests/unit/test_models.py audit/lib/tests/unit/test_schema.py audit/lib/tests/unit/test_validate_event.py audit/lib/tests/unit/test_validate_user_schema_validator.py audit/lib/tests/unit/test_validate_user_schemas.py audit/post/src/audit/post/__init__.py audit/post/src/audit/post/api.py audit/post/src/audit/post/config.py audit/post/src/audit/post/health.py audit/post/src/audit/post/main.py audit/post/src/audit/post/metrics.py audit/post/src/audit/post/middlewares.py audit/post/src/audit/post/validation.py audit/post/tests/integration/test_api.py audit/post/tests/integration/test_health.py audit/post/tests/unit/test_api.py audit/store/src/audit/store/__init__.py audit/store/src/audit/store/audit_db.py audit/store/src/audit/store/config.py audit/store/src/audit/store/health.py audit/store/src/audit/store/main.py audit/store/src/audit/store/prometheus.py audit/store/src/audit/store/sqs.py audit/store/src/audit/store/utils.py audit/store/tests/integration/test_main.py audit/store/tests/unit/test_utils.py audit/view/src/audit/view/__init__.py audit/view/src/audit/view/audit_db.py audit/view/src/audit/view/config.py audit/view/src/audit/view/main.py audit/view/tests/integration/test_events.py auth/auth/__init__.py auth/auth/authorisation.py auth/auth/config/__init__.py auth/auth/config/config_definer.py auth/auth/entity.py auth/auth/error.py auth/auth/external_api/__init__.py auth/auth/external_api/db.py auth/auth/external_api/error.py auth/auth/external_api/middleware.py auth/auth/external_api/tokens.py auth/auth/external_api/utils.py auth/auth/main.py auth/auth/middleware.py auth/auth/test_utils/__init__.py auth/auth/test_utils/fixtures.py auth/auth/utils.py auth/auth/validate.py auth/tests/integration/external_api/test_external_api_middleware.py auth/tests/integration/external_api/test_external_token_validation.py auth/tests/integration/test_authorisation.py auth/tests/integration/test_get_ip_whitelist.py auth/tests/integration/test_middleware.py auth/tests/unit/external_api/test_tokens.py auth/tests/unit/test_authorization.py auth/tests/unit/test_middleware.py auth/tests/unit/test_utils.py auth/tests/unit/test_validate.py beluga/beluga/__init__.py beluga/beluga/config/config_definer.py beluga/beluga/db.py beluga/beluga/endpoints/__init__.py beluga/beluga/endpoints/roles.py beluga/beluga/endpoints/tenants.py beluga/beluga/endpoints/users.py beluga/beluga/endpoints/utils.py beluga/beluga/mailer.py beluga/beluga/main.py beluga/client/beluga_client/client.py beluga/client/tests/unit/test_client.py beluga/tests/integration/test_roles.py beluga/tests/integration/test_tenants.py beluga/tests/integration/test_users.py beluga/tests/unit/test_mailer.py common/audit/src/common/audit/__init__.py common/audit/src/common/audit/helpers.py common/audit/src/common/audit/pytest_plugin.py common/audit/src/common/audit/utils_for_tests.py common/audit/tests/unit/test_helpers.py common/celery/src/common/celery/__init__.py common/celery/src/common/celery/celery.py common/celery/src/common/celery/config.py common/config/src/common/config/__init__.py common/config/tests/unit/test_config.py common/demo/src/common/demo/__init__.py common/demo/src/common/demo/utils.py common/demo/tests/integration/__init__.py
************* Module test_validate_event
audit/lib/tests/unit/test_validate_event.py:73:24: E1101: Module 'audit' has no 'lib' member (no-member)
audit/lib/tests/unit/test_validate_event.py:74:24: E1101: Module 'audit' has no 'lib' member (no-member)
audit/lib/tests/unit/test_validate_event.py:79:24: E1101: Module 'audit' has no 'lib' member (no-member)
************* Module test_validate_user_schema_validator
audit/lib/tests/unit/test_validate_user_schema_validator.py:142:24: E1101: Module 'audit' has no 'lib' member (no-member)
audit/lib/tests/unit/test_validate_user_schema_validator.py:144:8: E1101: Module 'audit' has no 'lib' member (no-member)
audit/lib/tests/unit/test_validate_user_schema_validator.py:147:8: E1101: Module 'audit' has no 'lib' member (no-member)
audit/lib/tests/unit/test_validate_user_schema_validator.py:150:8: E1101: Module 'audit' has no 'lib' member (no-member)
audit/lib/tests/unit/test_validate_user_schema_validator.py:155:8: E1101: Module 'audit' has no 'lib' member (no-member)
audit/lib/tests/unit/test_validate_user_schema_validator.py:160:8: E1101: Module 'audit' has no 'lib' member (no-member)
************* Module post.main
audit/post/src/audit/post/main.py:25:43: E1101: Module 'audit' has no 'post' member (no-member)
------------------------------------------------------------------
Your code has been rated at 9.90/10 (previous run: 9.90/10, +0.00)
(crpython-3.7) ip-10-42-1-179:pants-sandbox-LAoavj user$
ancient-france-42909
08/19/2022, 9:23 PMenough-analyst-54434
08/19/2022, 9:23 PMancient-france-42909
08/19/2022, 9:24 PM__run.sh
seems to have the correct stuff in there, but when I run the check on all the files it fails.enough-analyst-54434
08/19/2022, 9:25 PM__init__.py
?ancient-france-42909
08/19/2022, 9:25 PMancient-france-42909
08/19/2022, 9:26 PMbeluga/tests/integration/test_users.py:90:4: E1701: Async context manager 'async_generator' doesn't implement __aenter__ and __aexit__. (not-async-context-manager)
, which is false:
@contextlib.asynccontextmanager
async def setup_kevlar_environment(
name: str, allowed_client_tenants: List[Tuple[str, str, str]]
) -> AsyncGenerator[None, None]:
ancient-france-42909
08/19/2022, 9:28 PMancient-france-42909
08/19/2022, 9:28 PMancient-france-42909
08/19/2022, 9:28 PMenough-analyst-54434
08/19/2022, 10:30 PMancient-france-42909
08/19/2022, 10:31 PMenough-analyst-54434
08/19/2022, 10:31 PMancient-france-42909
08/19/2022, 10:31 PMenough-analyst-54434
08/19/2022, 10:33 PM[pylint] version = "pylint==2.14.5"
.ancient-france-42909
08/19/2022, 10:36 PMCould not find a version that satisfies the requirement pylint==2.14.5
enough-analyst-54434
08/19/2022, 10:36 PMenough-analyst-54434
08/19/2022, 10:37 PMancient-france-42909
08/19/2022, 10:37 PMenough-analyst-54434
08/19/2022, 10:38 PMenough-analyst-54434
08/19/2022, 10:39 PMenough-analyst-54434
08/19/2022, 10:39 PMancient-france-42909
08/19/2022, 10:39 PMenough-analyst-54434
08/19/2022, 10:40 PM<3
and seeing what pip picks is the way to go for the moment.ancient-france-42909
08/19/2022, 10:40 PM<3
ended up with 2.13.9enough-analyst-54434
08/19/2022, 10:40 PMancient-france-42909
08/19/2022, 10:41 PMenough-analyst-54434
08/19/2022, 10:42 PMenough-analyst-54434
08/19/2022, 10:43 PMenough-analyst-54434
08/19/2022, 10:45 PMenough-analyst-54434
08/19/2022, 10:45 PM>=3.7
?ancient-france-42909
08/19/2022, 10:45 PMenough-analyst-54434
08/19/2022, 10:46 PMenough-analyst-54434
08/19/2022, 10:47 PMancient-france-42909
08/19/2022, 10:49 PMexport CPPFLAGS= LC_CTYPE=en_GB.UTF-8 LDFLAGS= PATH=$'/Users/user/.poetry/bin:/usr/local/opt/openjdk@8/bin:/Users/user/.pyenv/shims:/Users/user/.pyenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Applications/Wireshark.app/Contents/MacOS:/Users/user/golang/bin:/usr/local/opt/go/libexec/bin:/Users/user/PycharmProjects/tools/aws/bin:/Users/user/.local/bin' PEX_IGNORE_RCFILES=true PEX_PYTHON_PATH=$'/Users/user/.pyenv/versions/crpython-3.7/bin:/Users/user/.pyenv/versions/3.10.0/bin:/Users/user/.pyenv/versions/3.10.3/bin:/Users/user/.pyenv/versions/3.6.6/bin:/Users/user/.pyenv/versions/3.6.8/bin:/Users/user/.pyenv/versions/3.7.4/bin:/Users/user/.pyenv/versions/3.8.12/bin:/Users/user/.pyenv/versions/3.9.5/bin:/Users/user/.pyenv/versions/aws-venv/bin:/Users/user/.pyenv/versions/boto_new/bin:/Users/user/.pyenv/versions/boto_old/bin:/Users/user/.pyenv/versions/catapult/bin:/Users/user/.pyenv/versions/compare-requirements/bin:/Users/user/.pyenv/versions/crpython-3.7/bin:/Users/user/.pyenv/versions/ipython/bin:/Users/user/.pyenv/versions/jupyter-test/bin:/Users/user/.pyenv/versions/kite-venv/bin:/Users/user/.pyenv/versions/pants-test/bin:/Users/user/.pyenv/versions/py-3.6.6/bin:/Users/user/.pyenv/versions/py-3.6.6-test-alembik/bin:/Users/user/.pyenv/versions/py-3.7/bin:/Users/user/.pyenv/versions/py-3.7-vtdownload/bin:/Users/user/.pyenv/versions/python-for-pants/bin:/Users/user/.pyenv/versions/sashimi_test/bin:/Users/user/.pyenv/versions/simon/bin:/Users/user/.pyenv/versions/test_mypy/bin:/Users/user/.pyenv/versions/test_mypy2/bin:/Users/user/.pyenv/versions/test_pip/bin:/Users/user/.pyenv/versions/tle-test/bin:/Users/user/.pyenv/versions/tle-test2/bin:/Users/user/.pyenv/versions/tle-test3/bin:/Users/user/.pyenv/versions/toolsvenv/bin' PEX_ROOT=.cache/pex_root PEX_SCRIPT=pex3
cd /private/var/folders/_j/1pch58t96g7d7sk4t4dp7qxm0000gp/T/pants-sandbox-9pCkWl
$'/Users/user/.pyenv/versions/crpython-3.7/bin/python3.7' ./pex lock create --tmpdir .tmp --python-path $'/Users/user/.pyenv/versions/crpython-3.7/bin:/Users/user/.pyenv/versions/3.10.0/bin:/Users/user/.pyenv/versions/3.10.3/bin:/Users/user/.pyenv/versions/3.6.6/bin:/Users/user/.pyenv/versions/3.6.8/bin:/Users/user/.pyenv/versions/3.7.4/bin:/Users/user/.pyenv/versions/3.8.12/bin:/Users/user/.pyenv/versions/3.9.5/bin:/Users/user/.pyenv/versions/aws-venv/bin:/Users/user/.pyenv/versions/boto_new/bin:/Users/user/.pyenv/versions/boto_old/bin:/Users/user/.pyenv/versions/catapult/bin:/Users/user/.pyenv/versions/compare-requirements/bin:/Users/user/.pyenv/versions/crpython-3.7/bin:/Users/user/.pyenv/versions/ipython/bin:/Users/user/.pyenv/versions/jupyter-test/bin:/Users/user/.pyenv/versions/kite-venv/bin:/Users/user/.pyenv/versions/pants-test/bin:/Users/user/.pyenv/versions/py-3.6.6/bin:/Users/user/.pyenv/versions/py-3.6.6-test-alembik/bin:/Users/user/.pyenv/versions/py-3.7/bin:/Users/user/.pyenv/versions/py-3.7-vtdownload/bin:/Users/user/.pyenv/versions/python-for-pants/bin:/Users/user/.pyenv/versions/sashimi_test/bin:/Users/user/.pyenv/versions/simon/bin:/Users/user/.pyenv/versions/test_mypy/bin:/Users/user/.pyenv/versions/test_mypy2/bin:/Users/user/.pyenv/versions/test_pip/bin:/Users/user/.pyenv/versions/tle-test/bin:/Users/user/.pyenv/versions/tle-test2/bin:/Users/user/.pyenv/versions/tle-test3/bin:/Users/user/.pyenv/versions/toolsvenv/bin' $'--output=lock.json' --no-emit-warnings $'--style=universal' --resolver-version pip-2020-resolver --target-system linux --target-system mac $'--indent=2' -r __pip_args.txt --no-pypi $'--index=<https://pypi.org/simple/>' --manylinux manylinux2014 --interpreter-constraint $'CPython==3.7.*' $'pylint==2.14.5'
ancient-france-42909
08/19/2022, 10:50 PM--python-path
is weird.enough-analyst-54434
08/19/2022, 10:51 PMancient-france-42909
08/19/2022, 10:51 PMenough-analyst-54434
08/19/2022, 10:52 PM--interpreter-constraint $'CPython==3.7.*'
? You need to know where to look for Pythonsenough-analyst-54434
08/19/2022, 10:53 PMancient-france-42909
08/19/2022, 10:53 PMenough-analyst-54434
08/19/2022, 10:55 PMenough-analyst-54434
08/19/2022, 10:55 PMenough-analyst-54434
08/19/2022, 10:55 PMancient-france-42909
08/19/2022, 10:56 PMenough-analyst-54434
08/19/2022, 10:56 PMancient-france-42909
08/19/2022, 10:57 PMinterpreter_constraints = ["CPython>=3.7.4"]
and it’s still not working 🙂enough-analyst-54434
08/19/2022, 10:57 PMancient-france-42909
08/19/2022, 10:58 PMenough-analyst-54434
08/19/2022, 10:58 PMancient-france-42909
08/19/2022, 10:58 PM2.14.5
enough-analyst-54434
08/19/2022, 10:58 PMenough-analyst-54434
08/19/2022, 11:01 PMancient-france-42909
08/19/2022, 11:04 PMenough-analyst-54434
08/19/2022, 11:06 PMenough-analyst-54434
08/19/2022, 11:13 PM.pylintrc
or any other means of configuring Pylint outside of Pants?enough-analyst-54434
08/19/2022, 11:14 PMenough-analyst-54434
08/19/2022, 11:19 PMenough-analyst-54434
08/19/2022, 11:22 PMenough-analyst-54434
08/19/2022, 11:29 PMpython_distribution
targets that share in the namespace. If those are dependencies of linted source files, they'll be turned into wheels and installed on the sys.path and might be the angle the issue is coming in on.enough-analyst-54434
08/19/2022, 11:36 PMenough-analyst-54434
08/19/2022, 11:52 PME1101: Module 'audit' has no 'lib' member (no-member)
ancient-france-42909
08/20/2022, 12:02 AMancient-france-42909
08/20/2022, 12:05 AM.pylintrc
, will paste it in the next message. Then, I’m not sure I understand the question about PEX_EXTRA_SYS_PATH. We do not have any python_distribution in our code. And, yes, I can import that.ancient-france-42909
08/20/2022, 12:06 AMenough-analyst-54434
08/20/2022, 12:15 AMenough-analyst-54434
08/20/2022, 12:17 AM./pants roots
you listed earlier. Things like PEX_EXTRA_SYS_PATH=audit/lib:audit/lib/src:...
where there are nested dirs in the list.ancient-france-42909
08/20/2022, 12:17 AMenough-analyst-54434
08/20/2022, 12:18 AMaudit/lib
is not actually a valid sys.path entry IIUC, audit/lib/tests
~is. I don't think that's at play, but, again, covering bases.ancient-france-42909
08/20/2022, 12:18 AMenough-analyst-54434
08/20/2022, 12:19 AM./pants roots
are bad based on the file lists you show above being passed to pylint.ancient-france-42909
08/20/2022, 12:19 AMenough-analyst-54434
08/20/2022, 12:19 AM