Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: Two packages with the same name; how do you specify which is loaded?

Tags:

python

import

I have two packages that install different packages with the same name. They are both "packages" in that they have top-level setup.py files which specify package=['foo'] in the setup command.

If I install using distutils.core, the last to be installed overwrites the previous one (but I think wouldn't overwrite unless the .py files all had the same names?). If I install using setuptools, the two packages get installed into different eggs.

One option would be to explicitly set sys.path before importing the package name; this seems "un-pythonic" and rather dirty.

Assuming I have these two identically named packages installed in different eggs from setuptools, how do I specify which is imported?

like image 463
keflavich Avatar asked Feb 08 '12 16:02

keflavich


1 Answers

Setuptools guide mentions --multi-version (-m) switch that removes package from sys.path completely. You have to use pkg_resources.require('package==version') in your code as early as possible to let it fix sys.path. This advice is what easy_install always prints when one uses -m.

But you can't have both imported at once (unless they're designed to do so using namespace packages).

like image 85
Zart Avatar answered Sep 24 '22 20:09

Zart