[Tutor] force imports from site-packages?
Steven D'Aprano
steve at pearwood.info
Fri Oct 7 04:54:48 CEST 2011
Alex Hall wrote:
> Hi all,
> I have managed to get a couple of packages in site-packages which
> share names with some folders in the same directory as a program, or
> at least a subdir somewhere below has the same name. Is there a way to
> force my script to look in lib/site-packages before the script's
> folder? I can't rename these folders since Git will get confused if I
> do.
> In other words, I have a package called LRSignature installed, but in
> a subdir of my script's directory is another LRSignature folder which
> is not an actual Python package. Python sees this non-package folder
It shouldn't. Python doesn't look into nested folders unless you
explicitly add them to the search path. Here's an example:
[steve at sylar ~]$ mkdir math
[steve at sylar ~]$ echo "print('spam')" > math/module.py
[steve at sylar ~]$ python
Python 2.5 (r25:51908, Nov 6 2007, 16:54:01)
[GCC 4.1.2 20070925 (Red Hat 4.1.2-27)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import math # Can we still see the standard math module?
>>> math.sin(1)
0.8414709848078965
>>> import module # How about the other module?
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named module
So as you can see, the math subdirectory and its content is ignored by
Python because it isn't explicitly part of the search path. So I don't
understand why you are seeing this problem unless you are cd'ing into
the LRSignature folder first.
> first and so, quite rightly, throws an exception that the class of the
> package I want, LRSignature.Sign, does not exist. It exists in the
> site-packages copy, but Python won't overlook the nearer copy. How do
> I make it do this? Thanks.
The *right* solution is to fix the name clash, which may or may not
involve changing the name of something. But I can't tell what, since I
don't understand why you are having this problem.
But if you can't fix the problem, you can cover it up by manipulating
the import search path. It is exposed as sys.path, and it is just a list
of places to look in the specific order given.
--
Steven
More information about the Tutor
mailing list