import in Python3.3
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Sun Mar 24 20:27:56 EDT 2013
On Sun, 24 Mar 2013 18:12:49 -0500, Fabian von Romberg wrote:
> Hi,
>
> I have a package name collections and inside of my package I want to
> import the collections package from the standard library, but there is
> name conflicts.
>
> How do I import explicitly from the standard library?
You can't. However, you can import explicitly from your package, or
implicitly by using a relative import.
Starting from Python 2.7, the "import" statement is always absolute. So
the line:
import collections
will always find the first *top level* module or package "collections" in
the python search path. See below for an important proviso.
Inside your package, you can either use an explicit import like this:
import mypackage.collections as collections
or use a relative import like this:
from . import collections
Here is a concrete example. I create a package containing five files:
mypackage/
+-- __init__.py
+-- collections.py
+-- absolute_import.py
+-- explicit_import.py
+-- relative_import.py
with the following content:
# absolute_import.py
import collections
# explicit_import.py
import mypackage.collections as collections
# relative_import.py
from . import collections
The other two files (collections.py and __init__.py) can be blank. Now,
from *outside* the package, I can do this:
py> import mypackage.absolute_import
py> import mypackage.explicit_import
py> import mypackage.relative_import
py>
py> mypackage.absolute_import.collections
<module 'collections' from '/usr/local/lib/python3.3/collections/__init__.py'>
py> mypackage.explicit_import.collections
<module 'mypackage.collections' from './mypackage/collections.py'>
py> mypackage.relative_import.collections
<module 'mypackage.collections' from './mypackage/collections.py'>
Of course "from mypackage import absolute_import" etc. will also work.
However, beware: if you cd into the package directory, and then launch
Python, the current directory will contain a file "collections.py" which
will shadow the standard library collections.py. So don't do that.
--
Steven
More information about the Python-list
mailing list