> On Oct 30, 2017, at 1:41 PM, Toshio Kuratomi <a.bad...@gmail.com> wrote:
>
> I figured that unless I
> asked, I would never know the answer :-)
>
TestPyPI has a couple of use cases, and it’s not very good at any of them.
One use case is to serve as a staging site for production PyPI to test changes
before they go to live. If I had to pick any use case as it’s “core” use case,
it would be this one, it’s currently optimized for it and we’re unlikely to
make changes that deviate from it. Unfortunately it’s not really good at this
because staging sites are generally not a great way to prevent regression
(versus something like automated testing), so with Warehouse TestPyPI is no
longer a staging site for the production code, and they are deployed at the
same time.
Another use case is the one you specified, someone wants to test their releases
prior to uploading to the “real” PyPI. TestPyPI is not great at this use case
both because, as you noted, it has the same “you can only upload a file once”
semantics as PyPI does, but also because it doesn’t have a full copy of
everything on PyPI (and worse, it potentially has broken or insecure or
malicious versions of your dependencies) so pip might either be blatantly
broken OR produce subtly broken installs. Long term the solution that I believe
has merit for this, is the ability to, on regular PyPI, “stage” an upload to a
temporary location that would automatically be deleted after some period of
time, and that once you were satisfied with it, could be published/committed
and thus be available to normal ``pip install`` invocations. This not only
would allow testing a release beforehand, but it would also allow projects that
produce many different artifacts across a variety of platforms to collect them
all and upload them and make them all available immediately instead of one at a
time. You can see more about this idea/use case at
https://github.com/pypa/warehouse/issues/726
<https://github.com/pypa/warehouse/issues/726>.
The third relevant use case of PyPI is people simply messing around or doing
testing of a generalized workflow tool but not specific to a specific package.
This could also include people who are learning how to produce a package, but
using a trivial throw away project (the infamous printer of nested lists is an
example of this). TestPyPI can be used for this as well, but again it’s not
really good at it. The key difference here is that ideally these projects are
either ephemeral or namespaced to the specific user. I don’t have a great idea
for how best to handle this, the immediate thought is a secondary deployment of
Warehouse (such as what TestPyPI is now), that just periodically and
automatically purges any projects > N days old to give it a more of a “sandbox”
vibe and use case. Given the aforementioned staging feature, we would likely
otherwise keep the same ruleset as exists on the production PyPI (and ideally,
we’d be re-using credentials too, instead of it literally being a complete
secondary deployment). That idea isn’t set in stone and I haven’t done a lot of
thinking about it yet, but discussion of that particular use case and ideas to
fix it would take place in https://github.com/pypa/warehouse/issues/2286
<https://github.com/pypa/warehouse/issues/2286>.
So longer term, I hope to shut down TestPyPI and replace it with features
and/or deployments more suited to whatever specific task/use case we’re hoping
to have served by it, rather than just sort of being poor at everything.
- dstufft
_______________________________________________
Distutils-SIG maillist - Distutils-SIG@python.org
https://mail.python.org/mailman/listinfo/distutils-sig