-
Notifications
You must be signed in to change notification settings - Fork 251
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
Cleanup vendored dependencies #25
Conversation
5168c49
to
a7fdee6
Compare
__vendor_site__ = (Path(__file__).parent / "_vendor").as_posix() | ||
|
||
if __vendor_site__ not in sys.path: | ||
sys.path.insert(0, __vendor_site__) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
While I agree it would be better in theory, I wonder if this won't conflict with what we do in Poetry, and if the vendors of poetry-core will not take precedence.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good question, I want to do a bit more testing on this one actually. We could move it into poetry/__init__.py
. Although, I am not a 100% on the ordering.
One thing I was wondering if we could provide a kind of proxy instead that can be smart enough to pick system one if the vendor site is not available. That would mean it would achieve what we want, while maintaining explicit imports.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For posterity, if the sys path option does need to be replaced later. This can be an alternative.
import sys
import importlib
from poetry.core.utils._compat import Path
__all__ = []
__vendored__ = {}
try:
# poor developer's requirements parser
with open(Path(__file__).parent / "vendor.txt") as f:
for line in f.readlines():
name, version = line.split("==")
__vendored__[name] = version
module_name = "poetry.core._vendor.{}".format(name)
try:
locals()[name] = importlib.import_module(module_name)
except ImportError:
locals()[name] = importlib.import_module(name)
sys.modules[module_name] = locals()[name]
__all__.append(name)
except (FileNotFoundError, ValueError, IndexError) as e:
pass
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
At that point, it might make sense to just switch to using pip's internal helper: pip._vendor:vendored
.
54917c8
to
d8ec3ee
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me 👍
This pull request contains 3 relevant changes to package vendoring.
Relates-to: #2346