How can I make setuptools install a package that”s not on PyPI?

StackOverflow

I"ve just started working with setuptools and virtualenv. My package requires the latest python-gearman that is only available from GitHub. The python-gearman version that"s on PyPI is an old one. The Github source is setuptools-compatible, i.e. has setup.py, etc. Is there a way to make setuptools download and install the new version instead of looking for it on PyPI and installing the old one?

FYI, the new python-gearman is http://github.com/mtai/python-gearman

Answer rating: 162

The key is to tell easy_install where the package can be downloaded. In this particular case, it can be found at the url http://github.com/mtai/python-gearman/tarball/master. However, that link by itself won"t work, because easy_install can"t tell just by looking at the URL what it"s going to get.

By changing it to http://github.com/mtai/python-gearman/tarball/master#egg=gearman-2.0.0beta instead, easy_install will be able to identify the package name and its version.

The final step is to add the URL to your package"s dependency_links, e.g.:

setup(
   ...
   dependency_links = ["http://github.com/mtai/python-gearman/tarball/master#egg=gearman-2.0.0beta"]
)

Now, when YOUR package is being installed, easy_install will discover that there is a "gearman 2.0.0beta" available for download from that URL, and happily pick it over the one on PyPI, if you specify "gearman>=2.0.0beta" in your dependencies..

(Normally, the way this sort of thing is done is to include a link on one"s PyPI page to the downloadable source; in this case, if the author of the gearman package had included a link like the above, you"d be already set. Typically, people mark the development version with "myproject-dev" and then people use a requirement of "myproject>=somever,==dev", so that if there isn"t a package of somever or higher, easy_install will try to check out or download the release.)

You"ll need to specify --process-dependency-links when using pip. Note that dependency links processing has been deprecated and will be removed in a future release.





Get Solution for free from DataCamp guru