import in Python3.3
Fabian von Romberg
fromberg100 at hotmail.com
Sun Mar 24 21:39:29 EDT 2013
Hi Steven,
thanks a lot for the explanation.
I will keep in mind not to use names for my modules that can shadow the standard library.
Regards,
Fabian
On 03/24/2013 07:27 PM, Steven D'Aprano wrote:
> 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.
>
>
>
More information about the Python-list
mailing list