Skip to content

Invalid "Module import itself" error for namespace packages. #2648

@feluxe

Description

@feluxe

Steps to reproduce

You can either clone this repo to get the test file tree:

git clone https://github.com/feluxe/test_pylint_ns_package_err.git

cd into it and run pipenv install --dev --pre

or create the file tree manually with the following steps:

Create test file tree manually:

Create this file tree:

tmp_pylint_err
├── nspackage
│   ├── mypackage
│   │   └── __init__.py
│   └── sty
│       └── __init__.py
└── test.py

Next, install pylint and sty from pypi in a Python 3.7 virtualenv:

pipenv install --dev --pre pylint sty

We add this line to nspackage/mypackage/__init__.py:

from nspackage.sty import fg

We add this line to nspackage/sty/__init__.py:

from sty import *

We add these lines to test.py:

from nspackage.sty import fg
from nspackage.mypackage import fg as fg2

print(f"{fg.green}hello1{fg.rs}")
print(f"{fg2.green}hello2{fg2.rs}")

Current behavior

Note: As you can see in the project file tree, nspackage is a name space package omitting __init__.py.

If I run pipenv run pylint nspackage, I get these errors:

************* Module sty
nspackage/sty/__init__.py:1:0: W0406: Module import itself (import-self)
************* Module mypackage
nspackage/mypackage/__init__.py:1:0: E0611: No name 'fg' in module 'nspackage.sty' (no-name-in-module)

Expected behavior

I think the example project is valid Python and pylint should not complain.

You can run test.py for validation:

pipenv run python test.py

which runs just fine.

pylint --version output

pylint 2.2.2
astroid 2.1.0
Python 3.7.1 (default, Nov 11 2018, 02:35:35) 
[GCC 8.2.1 20180831]

Activity

PCManticore

PCManticore commented on Dec 17, 2018

@PCManticore
Contributor

Thanks for reporting an issue!

Oberon00

Oberon00 commented on Oct 8, 2019

@Oberon00

At opentelemetry/opentelemetry-python, we have the same issue and it's very annoying as we would like to add companion modules for widely-used libraries that are named the same as the corresponding library, but in a different package.

EDIT: astroid==2.3.1,pylint==2.4.2
Python 3.7.3

Oberon00

Oberon00 commented on Oct 9, 2019

@Oberon00

It's very likely that #2862 is the same problem but that issue has a nicer repro.

Oberon00

Oberon00 commented on Oct 9, 2019

@Oberon00

Also, the topic-import-system label seems to be missing on this issue.

erensahin

erensahin commented on Apr 4, 2022

@erensahin

I run into the same problem when I use namespace packages. My pylint version is 2.4.4, I tried with more recent versions but it does not solve at all. Any suggestions?

Pierre-Sassoulas

Pierre-Sassoulas commented on Apr 4, 2022

@Pierre-Sassoulas
Member

Did you try to install from scratch (do you have the latest astroid version too) ? This issue seems related to #5235 it might be a solution. If you have an example of repository with namespace feel free to comment on it :)

erensahin

erensahin commented on Apr 4, 2022

@erensahin

Thanks! I uninstalled pylint and astroid, and re-installed pylint with its latest version (2.13.4).

I will try to explain the package structure. The problem is, namespace package name conflicts with another python library name (it is an internal one, so I will pick pandas as an example);

├── namespace_pkg
│   ├── pandas
│   │   └── __init__.py
│   └── something_else
│       └── __init__.py

The content of namespace_pkg/pandas/init.py is as follows;

cat namespace_pkg/pandas/__init__.py

from pandas import DataFrame
df = DataFrame([[1,2]])
print(df)

When I run the file directly as python namespace_pkg/pandas/__init__.py, I don't encounter any problem at all;

   0  1
0  1  2

But when I run pylint: pylint namespace_pkg/, I get the error as;

namespace_pkg/pandas/__init__.py:1:0: W0406: Module import itself (import-self)
erensahin

erensahin commented on Apr 4, 2022

@erensahin

Did you try to install from scratch (do you have the latest astroid version too) ? This issue seems related to #5235 it might be a solution. If you have an example of repository with namespace feel free to comment on it :)

Plus, #5235 looks quite promising for my problem :)

24 remaining items

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @PCManticore@Oberon00@Pierre-Sassoulas@feluxe@DanielNoord

      Issue actions

        Invalid "Module import itself" error for namespace packages. · Issue #2648 · pylint-dev/pylint