Skip to content

Python file with more than one entry breaks module resolution #3727

Closed
@jaredcm

Description

@jaredcm

Environment data

  • VS Code version: Version 1.30.0 (1.30.0)
  • Extension version (available under the Extensions sidebar): 2018.12.1
  • OS and version: Mac OS 10.14.1
  • Python version (& distribution if applicable, e.g. Anaconda): 3.7 cPython
  • Type of virtual environment used (N/A | venv | virtualenv | conda | ...): pyenv
  • Relevant/affected Python packages and their versions: None

Expected behaviour

Adding custom locations to .pth file should be resolved by the Python intellisense.

Actual behaviour

I have a custom package that is in a subdirectory of my project. I want Python to resolve it as if it were an installed module.

The project is setup as such.
os_path
-|+- project_dir
--|+- bin
---|+- test.py
--|+- lib
---|+- custom_module
----|+- __init__.py

In the python 3.7 site-packages directory I have a .pth file with something like the following contents.
{os_dir}/{project_dir}
{os_dir}/{project_dir}/lib

In Python this resolves without issue and so I can do.

Python 3.7.0 (default, Aug 21 2018, 11:16:24) 
[Clang 9.1.0 (clang-902.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import custom_module
>>> custom_module.test()
Hello

If I create a test.py file in the project's bin directory like so:

"""This is a test."""
import custom_module
custom_module.test()

In VSCode I get unresolved import:

{
"resource": "/{os_path}/{project_dir}/bin/test.py",
"owner": "generated_diagnostic_collection_name#0",
"code": "unresolved-import",
"severity": 4,
"message": "unresolved import 'custom_module'",
"source": "Python",
"startLineNumber": 2,
"startColumn": 8,
"endLineNumber": 2,
"endColumn": 21
}

If I switch the import to lib.{custom_module} then the module resolution works. I'm guessing this is because VSCode adds the workspace to the PYTHONPATH.

Steps to reproduce:

  1. Setup a project with a module that is +1 level deep in the project. i.e. lib/custom_module/__init__.py
  2. Add a test function for resolution to __init__.py
"""This is a test."""


def test() -> None:
    """This is a test function."""
    print("Hello")

  1. In the Python site-packages create a .pth file and add the full OS path to the lib directory.
  2. Try to import the custom_module in a test file (see my test file above).

Logs

Output for Python in the Output panel (ViewOutput, change the drop-down the upper-right of the Output panel to Python)

##########Linting Output - pydocstyle##########
##########Linting Output - mypy##########
##########Linting Output - prospector##########
##########Linting Output - prospector##########
##########Linting Output - pylama##########

Log (Window)

[2018-12-17 11:35:21.724] [renderer1] [error] Tree element not found: [object Object]: Error: Tree element not found: [object Object]
    at e.getElementLocation (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:214:266)
    at e.isCollapsed (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:213:757)
    at i.e.isCollapsed (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:962:723)
    at i.e.isExpanded (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:962:786)
    at t.revealMarkersForCurrentActiveEditor (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:4710:827)
    at t.autoReveal (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:4710:647)
    at t.onActiveEditorChanged (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:4707:826)
    at e.fire (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:189:532)
    at t.doEmitActiveEditorChangeEvent (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:4720:942)
    at t.handleActiveEditorChange (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:4720:718)
    at file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:4721:55
    at e.fire (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:189:512)
    at file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:5170:861
    at Object.g [as _notify] (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:167:807)
    at Object.enter (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:171:85)
    at n.Class.derive._creator._run (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:172:932)
    at n.Class.derive._creator._completed (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:172:373)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)

Output from Console under the Developer Tools panel (toggle Developer Tools on under Help)

log.ts:169   ERR Tree element not found: [object Object]: Error: Tree element not found: [object Object]
    at e.getElementLocation (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:214:266)
    at e.isCollapsed (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:213:757)
    at i.e.isCollapsed (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:962:723)
    at i.e.isExpanded (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:962:786)
    at t.revealMarkersForCurrentActiveEditor (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:4710:827)
    at t.autoReveal (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:4710:647)
    at t.onActiveEditorChanged (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:4707:826)
    at e.fire (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:189:532)
    at t.doEmitActiveEditorChangeEvent (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:4720:942)
    at t.handleActiveEditorChange (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:4720:718)
    at file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:4721:55
    at e.fire (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:189:512)
    at file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:5170:861
    at Object.g [as _notify] (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:167:807)
    at Object.enter (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:171:85)
    at n.Class.derive._creator._run (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:172:932)
    at n.Class.derive._creator._completed (file:///Applications/Design/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:172:373)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
console.ts:134 [Extension Host] Python Extension: Failed to parse Prospector output SyntaxError: Unexpected end of JSON input
	at JSON.parse (<anonymous>)
	at module.exports.t.Prospector.<anonymous> (/~/.vscode/extensions/ms-python.python-2018.12.1/out/client/extension.js:83:585133)
	at Generator.next (<anonymous>)
	at module.exports.r (/~/.vscode/extensions/ms-python.python-2018.12.1/out/client/extension.js:83:584675)
	at new Promise (<anonymous>)
	at module.exports.r (/~/.vscode/extensions/ms-python.python-2018.12.1/out/client/extension.js:83:584452)
	at module.exports.t.Prospector.parseMessages (/~/.vscode/extensions/ms-python.python-2018.12.1/out/client/extension.js:83:585083)
	at module.exports.t.Prospector.<anonymous> (/~/.vscode/extensions/ms-python.python-2018.12.1/out/client/extension.js:1:77469)
	at Generator.next (<anonymous>)
	at s (/~/.vscode/extensions/ms-python.python-2018.12.1/out/client/extension.js:1:75269)
	at <anonymous>
t.log @ console.ts:134
t._logExtensionHostMessage @ extensionHost.ts:453
(anonymous) @ extensionHost.ts:244
emitTwo @ events.js:126
emit @ events.js:214
emit @ internal/child_process.js:772
_combinedTickCallback @ internal/process/next_tick.js:141
_tickCallback @ internal/process/next_tick.js:180

Metadata

Metadata

Assignees

No one assigned

    Labels

    area-intellisenseLSP-related functionality: auto-complete, docstrings, navigation, refactoring, etc.bugIssue identified by VS Code Team member as probable bug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions