-
-
Notifications
You must be signed in to change notification settings - Fork 2.7k
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
--pyargs does not understand namespace packages #478
Comments
The relevant code is here. Instead of iteratively importing from the top level package, could it try importing from the full path first and, if it fails, iteratively pop the rightmost element off until it succeeds in importing and then do the file lookup from there? I'm happy to implement a solution if there is a reasonable option available. |
Since this is a setuptools mess, how about supporting |
That seems fine to me. Does it work for packages though? I don't have a strong opinion on the discovery mechanism as long as it supports namespace packages. |
not sure off-hand, i'll probably need a while before i can touch it due to volunteering time constraints |
@scottpurdy is this sill an issue, with the gradual phasing out of eggs im thinking of letting this one be unless someone makes a pr |
Not super high priority for me or I'd help out. Are eggs really being phased out? |
yes, its no longer part of the equation in modern packaging tools |
.. unless you want to support zip importing, which is really important for slow filesystems like NFS. This bug is related to #1445 - the test collector doesn't support zipfile importing either.
|
This is kinda easy to trip over when using --pyargs, since one forgotten If a fix is complex, maybe just print a hint? Right now it says:
When we're on a Python supporting NS packages and --pyargs was used it could say something like...
|
@enkore very good point |
Not at all. It's no harm opening a PR, even if to entice more discussion. But I think adding just the message should be enough for this issue for now. |
Add hint of Issue #478 to error text
#2085 (thanks @DuncanBetts) adds the warning message at least. |
I considered making all the tests namespace packages, but it turns out pytest [chokes](pytest-dev/pytest#3396) [on](pytest-dev/pytest#1927) [namespace packages](pytest-dev/pytest#478). So this is the best solution for now. Test plan: made a distribution (python setup.py sdist) then installed it in a separate virtualenv. then ran tests (`pytest --pyargs napari`).
I considered making all the tests namespace packages, but it turns out pytest [chokes](pytest-dev/pytest#3396) [on](pytest-dev/pytest#1927) [namespace packages](pytest-dev/pytest#478). So this is the best solution for now. Test plan: made a distribution (python setup.py sdist) then installed it in a separate virtualenv. then ran tests (`pytest --pyargs napari`). Fixes napari#875
I considered making all the tests namespace packages, but it turns out pytest [chokes](pytest-dev/pytest#3396) [on](pytest-dev/pytest#1927) [namespace packages](pytest-dev/pytest#478). So this is the best solution for now. Test plan: made a distribution (python setup.py sdist) then installed it in a separate virtualenv. then ran tests (`pytest --pyargs napari`). Fixes napari#875
I considered making all the tests namespace packages, but it turns out pytest [chokes](pytest-dev/pytest#3396) [on](pytest-dev/pytest#1927) [namespace packages](pytest-dev/pytest#478). So this is the best solution for now. Test plan: made a distribution (python setup.py sdist) then installed it in a separate virtualenv. then ran tests (`pytest --pyargs napari`). Fixes napari#875
Originally reported by: Wolfgang Schnerring (BitBucket: wosc, GitHub: wosc)
The pyargs resolution does not understand namespace packages when the different contributing packages are installed as eggs (which is the layout used by zc.buildout and also
pip install --egg
, see http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages). It looks like this:This is a well supported layout, which means
import zope.asdf
andimport zope.qwer
work just fine (the specification is something to the effect of, if there is more than one directory that claims to be package "zope", there is no guarantee which one you will actually get when you sayimport zope
, but all subpackages will be accessible regardless).But
py.test --pyargs zope.asdf
will work, whilepy.test --pyargs zope.qwer
will say "file or package not found" (it might also be the other way around, so zope.qwer works, but zope.asdf doesn't).This is because
_pytest.main.Session._tryconvertpyarg
does not actually rely on the Python import mechanism to do the resolution (I'm not sure why, I'm guessing it's to support collecting tests outside of packages?). Instead it splits the argument on dots and loads the parts from the import system, assuming their filesystem location is the one that matters -- which is incorrect. In the example, trying to resolvezope.qwer
, it will first resolvezope
, which results in a random matching entry, e.gsite-packages/zope.asdf/zope/__init__.py
. It then assumes that the rest of the name must exist below this specific directory, thus never findingzope.qwer
.The text was updated successfully, but these errors were encountered: