53 lines
2.7 KiB
ReStructuredText
53 lines
2.7 KiB
ReStructuredText
"Development Mode"
|
|
==================
|
|
|
|
Under normal circumstances, the ``distutils`` assume that you are going to
|
|
build a distribution of your project, not use it in its "raw" or "unbuilt"
|
|
form. However, if you were to use the ``distutils`` to build a distribution,
|
|
you would have to rebuild and reinstall your project every time you made a
|
|
change to it during development.
|
|
|
|
Another problem that sometimes comes up with the ``distutils`` is that you may
|
|
need to do development on two related projects at the same time. You may need
|
|
to put both projects' packages in the same directory to run them, but need to
|
|
keep them separate for revision control purposes. How can you do this?
|
|
|
|
Setuptools allows you to deploy your projects for use in a common directory or
|
|
staging area, but without copying any files. Thus, you can edit each project's
|
|
code in its checkout directory, and only need to run build commands when you
|
|
change a project's C extensions or similarly compiled files. You can even
|
|
deploy a project into another project's checkout directory, if that's your
|
|
preferred way of working (as opposed to using a common independent staging area
|
|
or the site-packages directory).
|
|
|
|
To do this, use the ``setup.py develop`` command. It works very similarly to
|
|
``setup.py install``, except that it doesn't actually install anything.
|
|
Instead, it creates a special ``.egg-link`` file in the deployment directory,
|
|
that links to your project's source code. And, if your deployment directory is
|
|
Python's ``site-packages`` directory, it will also update the
|
|
``easy-install.pth`` file to include your project's source code, thereby making
|
|
it available on ``sys.path`` for all programs using that Python installation.
|
|
|
|
In addition, the ``develop`` command creates wrapper scripts in the target
|
|
script directory that will run your in-development scripts after ensuring that
|
|
all your ``install_requires`` packages are available on ``sys.path``.
|
|
|
|
You can deploy the same project to multiple staging areas, e.g. if you have
|
|
multiple projects on the same machine that are sharing the same project you're
|
|
doing development work.
|
|
|
|
When you're done with a given development task, you can remove the project
|
|
source from a staging area using ``setup.py develop --uninstall``, specifying
|
|
the desired staging area if it's not the default.
|
|
|
|
There are several options to control the precise behavior of the ``develop``
|
|
command; see the section on the :ref:`develop <develop>` command below for more details.
|
|
|
|
Note that you can also apply setuptools commands to non-setuptools projects,
|
|
using commands like this::
|
|
|
|
python -c "import setuptools; with open('setup.py') as f: exec(compile(f.read(), 'setup.py', 'exec'))" develop
|
|
|
|
That is, you can simply list the normal setup commands and options following
|
|
the quoted part.
|