On Monday, September 17, 2018, Paul Moore <p.f.mo...@gmail.com> wrote:

> On Sun, 16 Sep 2018 at 15:08, Nick Coghlan <ncogh...@gmail.com> wrote:
>
> > So if folks are still interested in the general idea of improving
> virtualenv and venv interoperability, then my last message to that thread
> and Paul's follow up would be a decent place to start:
> https://github.com/pypa/virtualenv/pull/697#issuecomment-333437537
> >
> > However, eliminating virtualenv as a project/component is a definite
> *non*-goal. While venv is valuable because it integrates more tightly into
> the interpreter startup sequence than virtualenv itself was ever able to
> (and provides a common API for doing virtualenv-like things across
> different Python implementations), virtualenv remains valuable as a
> cross-version compatibility and enhancement layer for the parts that don't
> need to be as tightly integrated with the core interpreter implementation.
> We just hope to eventually be able to delete most of the code from it, and
> have it just handle the parts that venv itself doesn't cover in any given
> version of Python :)
>
> +1 on this.
>
> I'd also consider the possibility of taking the core virtualenv code
> used to build a virtual environment on Python 2.7 (and Python 3
> versions without venv, if you insist) and using it to support the same
> programming API that venv provides. Writing front ends against the
> venv API alone would be a nice simplification, and would clearly
> isolate the bits of virtualenv that are the "essential core" from the
> UI/frontend parts. I don't know how easy that would be to do, but it's
> probably worth looking at.
>
> In my view, the best long-term approach to making virtualenv
> sustainable is along those lines - where possible, use the core venv
> for the low-level "make a virtual environment" functionality, and use
> the existing virtualenv approach (which is basically a series of
> hacks) to support systems where venv isn't an option. Then on top of
> that, have a common UI (which would probably be essentially the same
> as the current virtualenv UI, at least in the short term). Even if
> that's ultimately going to be the "new virtualenv" (option 1 from
> Nick's comment referenced above) it can be prototyped as a standalone
> utility (Tzu-ping Chung's wrapper is something along those lines, but
> to be a "proper" prototype of the way forward it would need to include
> the relevant virtualenv code, rather than calling out to virtualenv).
>
> As far as maintainability of virtualenv itself goes, I'm very
> reluctant to get sucked into debates here - last time I tried to
> discuss the issues behind why virtualenv is so hard to maintain, I was
> subjected to some *very* hostile responses, and I'm not willing to
> deal with anything like that again. But for what it's worth, and I
> don't intend to do anything more than state the following and leave it
> at that, my views are as follows:
>
> 1. Virtualenv is extremely widely used, and so has to be very cautious
> about backward compatibility. The code is full of special cases for
> various systems (particularly the many Unix variants around) and we
> don't have any sort of testing to ensure that we don't break things.
> Any PR that comes in affecting the core functionality is (entirely
> understandably) focused on fixing an issue with the submitter's
> environment. But who will make sure that it doesn't break some other
> environment? And how will they do that? Having a formal statement of
> what systems we support would limit the risks here, but wouldn't
> fundamentally alter the problem. It would mostly just let us reject a
> higher proportion of issue reports and PRs, which isn't really
> helpful.


Tests would be helpful, indeed.
Which {Linux, OSX, Windows, Unix*} {Bash, ZSH, Fish, } {CPython, PyPy,
Jython, IronPython} shells have issues?

Are there GitHub issue labels for each of these features of the build
matrix?


> 2. There are a lot of rarely if ever used options to virtualenv, some
> of which are known to be at least partially broken (--clear, --prompt,
> --relocatable).


--relocatable  only doesn't work when necessarily absolute paths are
hardcoded in checksummed fixed-width fields in binaries, AFAIR.

I can't even remember what --clear or --prompt do, OTOH.


> Rather than try to fix or support these, we should
> simply remove them. Again, it's about reducing the support burden of
> having to investigate issues in functionality that we aren't confident
> in, and have no experience with.
> 3. We should clearly separate the various aspects of virtualenv:
>    a) The core functionality of making a "virtual environment". This
> is the most vital part of virtualenv and the most fragile. But it's
> also the bit that mostly "just works". (If it didn't, everyone using
> tox would be screaming, for a start).
>    b) The support features - activate scripts, in particular. These
> are in theory completely optional, although it would be naive to
> ignore the fact that "activate" is most people's normal interaction
> with virtualenv. IMO, the activate scripts should take a "lowest
> common denominator" approach, and we should push back on requests to
> load functionality onto them. There's a particular complication here
> in that we should provide the same behaviour from all the activate
> scripts (e.g., setting a $VIRTUAL_ENV environment variable) and
> finding someone who can maintain that feature parity across 3
> different Unix shells and 2 Windows shells is pretty difficult, so any
> changes risk introducing discrepancies.
>   c) The UI, which includes the command line interface and the API for
> extending virtualenv
> (https://virtualenv.pypa.io/en/stable/reference/#creating-
> your-own-bootstrap-scripts
> - which I suspect no-one ever uses). This is relatively easy to
> support, but I don't recall the last time I saw an issue in this area.
> 4. We have essentially no test suite, and no CI to run one (even if we
> did have one) on anything more than a tiny fraction of the
> environments we support (e.g. Travis is Ubuntu only - so won't cover
> things like the Gentoo specific code). So we've no way of catching
> regressions.


Travis has Linux and OSX/MacOS CI environments (w/ Homebrew).
https://docs.travis-ci.com/user/multi-os/
https://docs.travis-ci.com/user/reference/osx/

Appveyor has Linux and Windows ci environments.
Appveyor is also used by conda-forge (conda-smithy) for Windows CI
environments.
https://www.appveyor.com/docs/build-environment/

conda-smithy adds a push hook to run CI builds on all supported CI
platforms on git push:
https://github.com/conda-forge/conda-smithy


> 5. As noted above, we've never to my knowledge had bug reports from
> people using virtualenv via tox (or, nox, pew, or any of the other
> projects that use virtualenv to support their functionality). And I
> believe that those constitute the *vast* majority of virtualenv users.
> We have to prioritise not breaking those uses above anything else (I
> don't want to be the person responsible for causing every Python CI
> run on Travis to go red... :-))
>
> Maybe we should drop support for everything but the most common
> platforms. That would certainly help sustainability, IMO. But who
> decides what's supported? Do we drop Gentoo? What about the fish
> shell? Or Jython or PyPy? What about Python 3.1? Don't ask me, unless
> you want an answer something like "CPython 2.7 and 3.4+, on Windows 7+
> or Mac OS, Ubuntu and Fedora versions less than 2 years old, non-root
> users, default config only, and only bash, Powershell and CMD". And
> I'm being generous even going that far...
>
> Just some thoughts to consider before diving into major upheavals with
> virtualenv.
>
> Paul
> --
> Distutils-SIG mailing list -- distutils-sig@python.org
> To unsubscribe send an email to distutils-sig-le...@python.org
> https://mail.python.org/mm3/mailman3/lists/distutils-sig.python.org/
> Message archived at https://mail.python.org/mm3/
> archives/list/distutils-sig@python.org/message/
> TEFZLIWXIQ4OAQ3FUT7WB6RXTAJUR2FJ/
>
--
Distutils-SIG mailing list -- distutils-sig@python.org
To unsubscribe send an email to distutils-sig-le...@python.org
https://mail.python.org/mm3/mailman3/lists/distutils-sig.python.org/
Message archived at 
https://mail.python.org/mm3/archives/list/distutils-sig@python.org/message/JEEPRVUWQX7LDEL3PSY34RGZCH5J6GIO/

Reply via email to