Skip to content

Commit

Permalink
Deprecated Eggsecutable Scripts
Browse files Browse the repository at this point in the history
Closes: pypa#1557
  • Loading branch information
venthur committed May 15, 2019
1 parent 6310f99 commit 314386f
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 38 deletions.
1 change: 1 addition & 0 deletions changelog.d/1557.change
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Deprecated eggsecutable scripts and removed related docs.
37 changes: 0 additions & 37 deletions docs/setuptools.txt
Original file line number Diff line number Diff line change
Expand Up @@ -569,43 +569,6 @@ on "entry points" in general, see the section below on `Dynamic Discovery of
Services and Plugins`_.


"Eggsecutable" Scripts
----------------------

Occasionally, there are situations where it's desirable to make an ``.egg``
file directly executable. You can do this by including an entry point such
as the following::

setup(
# other arguments here...
entry_points={
'setuptools.installation': [
'eggsecutable = my_package.some_module:main_func',
]
}
)

Any eggs built from the above setup script will include a short executable
prelude that imports and calls ``main_func()`` from ``my_package.some_module``.
The prelude can be run on Unix-like platforms (including Mac and Linux) by
invoking the egg with ``/bin/sh``, or by enabling execute permissions on the
``.egg`` file. For the executable prelude to run, the appropriate version of
Python must be available via the ``PATH`` environment variable, under its
"long" name. That is, if the egg is built for Python 2.3, there must be a
``python2.3`` executable present in a directory on ``PATH``.

This feature is primarily intended to support ez_setup the installation of
setuptools itself on non-Windows platforms, but may also be useful for other
projects as well.

IMPORTANT NOTE: Eggs with an "eggsecutable" header cannot be renamed, or
invoked via symlinks. They *must* be invoked using their original filename, in
order to ensure that, once running, ``pkg_resources`` will know what project
and version is in use. The header script will check this and exit with an
error if the ``.egg`` file has been renamed or is invoked via a symlink that
changes its base name.


Declaring Dependencies
======================

Expand Down
9 changes: 8 additions & 1 deletion setuptools/command/bdist_egg.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,14 @@
import re
import textwrap
import marshal
import warnings

from setuptools.extern import six

from pkg_resources import get_build_platform, Distribution, ensure_directory
from pkg_resources import EntryPoint
from setuptools.extension import Library
from setuptools import Command
from setuptools import Command, SetuptoolsDeprecationWarning

try:
# Python 2.7 or >=3.2
Expand Down Expand Up @@ -278,6 +279,12 @@ def gen_header(self):
if ep is None:
return 'w' # not an eggsecutable, do it the usual way.

warnings.warn(
"Eggsecutables are deprecated and will be removed in a future "
"version.",
SetuptoolsDeprecationWarning
)

if not ep.attrs or ep.extras:
raise DistutilsSetupError(
"eggsecutable entry point (%r) cannot have 'extras' "
Expand Down

0 comments on commit 314386f

Please sign in to comment.