-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Add --seed-packages. #2015
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
Add --seed-packages. #2015
Conversation
Codecov Report
@@ Coverage Diff @@
## main #2015 +/- ##
==========================================
- Coverage 94.36% 94.08% -0.29%
==========================================
Files 86 86
Lines 4280 4295 +15
==========================================
+ Hits 4039 4041 +2
- Misses 241 254 +13
Flags with carried forward coverage won't be shown. Click here to find out more.
Continue to review full report at Codecov.
|
@@ -98,6 +109,15 @@ def add_parser_arguments(cls, parser, interpreter, app_data): | |||
help="disable the periodic (once every 14 days) update of the embedded wheels", | |||
default=not PERIODIC_UPDATE_ON_BY_DEFAULT, | |||
) | |||
parser.add_argument( |
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.
IMHO this should be a separate plugin. This needs a lot more thought, on e.g. how this interacts with periodic update feature, transitive dependencies and where do we get these custom wheels you're injecting here. Perhaps you're after a pip functionality here, not virtualenv one. In general would be nice to open an issue to discuss such proposal before you lead on with a solution.
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.
IMHO this should be a separate plugin. This needs a lot more thought, on e.g. how this interacts with periodic update feature, transitive dependencies and where do we get these custom wheels you're injecting here. Perhaps you're after a pip functionality here, not virtualenv one. In general would be nice to open an issue to discuss such proposal before you lead on with a solution.
Should the discussion be here? I find it's often useful to propose a problem and solution together.
The wheels are supplied externally, hence my VIRTUALENV_EXTRA_SEARCH_DIR
.
It shouldn't interact with periodic update; AFAICT the intent of that is only for the embedded wheels (maybe I should ensure that code is explicitly restricted to those).
Based on #1923 it seems like virtualenv won't support traversing dependencies for now. Until it does, you need to specify your whole dependency set in --seed-package
, but this seems fine for now.
Updating pip would solve my problem as well; I thought that --seed-package
was a smaller ask than pip
vendoring more code. I thought they would want to be as lightweight as possible. If you think I'm more likely to succeed with pip, I can try there instead.
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.
Based on #1923 it seems like virtualenv won't support traversing dependencies for now.
This is not true, just waiting for implementation. I'd consider this a blocking functionality request for this PR.
Until it does, you need to specify your whole dependency set in --seed-package, but this seems fine for now.
I disagree.
Updating pip would solve my problem as well; I thought that
--seed-package
was a smaller ask thanpip
vendoring more code.
Wishful thinking. 😊
If you want to go ahead with the current works for your half-baked solution I recommend using a plugin, but for acceptance in the core, we'd need at the very least traversing and handling dependencies too.
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.
If you want to go ahead with the current works for your half-baked solution I recommend using a plugin, but for acceptance in the core, we'd need at the very least traversing and handling dependencies too.
Fair enough! thanks for your time.
Hello,
I added a
--seed-packages
option to the builtin seeders. This tells them to seed additional packages, with the intent being to provide a way to bootstrap any packages required to makepip
work.My use case is that my machine can only access the internet through a socks proxy (in fact I use tails, which routes all internet traffic through tor). This causes problems for most virtualenvs, because
pip
requires PySocks to download anything, so I have to bootstrap every virtualenv with a.whl
file downloaded from a web browser.This is fine for my own virtualenvs, but tools like
tox
andpre-commit
create virtualenvs with little opportunity to customize bootstrapping. See pre-commit/pre-commit#1697 for some discussion.I considered writing a custom seeder plugin, but I expect that virtualenv-creating tools would override my plugin with
--seeder
, based on considerations of how to seed, rather than what to seed. So I thought it was better to modify the builtin seeders.For my case, I can do
then,
pre-commit
andtox
work normally everywhere.I'm not sure if this is immediately useful for other cases, but I see a lot of try-import blocks in
pip
's source code, so I expect it's useful to someone somewhere.This PR is still WIP while I add tests, but I thought I should open it now for discussion purposes.