What are the benefits and downsides of using the P

2020-06-23 07:50发布

问题:

When I release a program, I usually just create a setup.py and put it on pypi. It's installable with pip, I can always share it easily with others. It works for me, and apparently for a lot of people.

I see the benefit of making an exe, a deb or a rmp to easy sysadmin.

But I really don't see the point of using eggs. Can you tell me what can I gain from it ?

I also once read that eggs had downsides, but I can't find the article anymore. Could you describe to me what problems using this packaging format can cause ?

Please note that I did saw this question, but the answer is also applicable to a simple directory with setup.py. It doesn't tell me the benefits of eggs over the simpler format.

回答1:

Eggs are tied to a specific architecture and python version, and until Python 3.3, if the egg contains C extensions, even the internal Unicode representation size (UCS2 vs. UCS4).

Unfortunately, the latter difference is not captured in the egg metadata; an egg filename contains the architecture and the python version (major.minor, so 2.4 or 3.1) but the unicode byte size is omitted.

Because of this, eggs are not very portable. A .tgz or .zip distribution on the other hand, is (hopefully) platform agnostic. Your installation tool, be it easy_install, pip, buildout or whatever, knows how to compile a python package distribution into an egg for you, so you generally avoid distributing the .egg files altogether.

The only exception is Windows, where most people will be lacking the toolchain to compile C extensions. As Windows distributions of Python default to UCS2, you are usually safe to distribute Windows .egg builds of packages with C extensions, to facilitate installation by automated tools.

If you use the setup.py script to create the distribution, it's trivial to create a source-only package for upload to PyPI. I can recommend the Python Packaging User Guide for more information.



回答2:

*.egg is a pure deployment format that is used after having a package installed through easy_install or pip.

Is does not make sense uploading files as .egg to PyPI. People doing this have no idea what they are doing.

A proper PyPI release is either a .tar.gz archive, or a .zip archive or .exe file (for Windows binaries e.g.) but NEVER EVER a *.egg file.