Bug 368970 - Python: autocompletion not available for library installed in virtualenv
Summary: Python: autocompletion not available for library installed in virtualenv
Status: RESOLVED FIXED
Alias: None
Product: kdev-python
Classification: Developer tools
Component: general (show other bugs)
Version: 5.0.0
Platform: Appimage Linux
: NOR wishlist
Target Milestone: ---
Assignee: Sven Brauch
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-09-17 19:09 UTC by Gregor Mi
Modified: 2016-11-29 05:23 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Gregor Mi 2016-09-17 19:09:35 UTC
I installed the aracade gaming library using virtualenv as described here: http://pythonhosted.org/arcade/installation_linux.html with the exception that I used the openSUSE python3.5-opt interpreter because the library needs python >= 3.5:

virtualenv ~/.virtualenvs/arcade -p /opt/python/bin/python3.5

I put this sample code (http://programarcadegames.com/python_examples/show_file.php?file=moving_sprites.py) into a file and opened it with kdevelop.

In the `import arcade` statement the arcade is underlined. Autocompletion is not available for this library.

Is it possible to tell kdevelop where to look for the library definition?
Comment 1 Sven Brauch 2016-09-20 07:24:49 UTC
Add the path in Configure Project -> Include paths.

I eventally want to support a configurable python interpreter per project to retrieve paths from, that's a long-standing feature request ...
Comment 2 Gregor Mi 2016-09-21 21:33:15 UTC
I created a new Python project, added my source file and put 

/home/gregor/.virtualenvs/arcade/lib/python3.5/site-packages

(which contains an arcade folder with the py files) into Open Configuration... > Include/Imports.

Now, `import arcade` is not underlined anymore but I still cannot navigate to the source or get auto-completion for arcade types.
Comment 3 Sven Brauch 2016-09-21 21:34:42 UTC
Hmm, is that package written in Python?

Does pressing F5 change anything? Maybe the project wasn't reparsed.
Comment 4 Gregor Mi 2016-09-22 17:46:12 UTC
I pressed F5 and it did change nothing.

The .../site-packages/arcade directory looks like this:

total 180
-rw-r--r-- 1   2165 Sep 17 20:46 application.py
-rw-r--r-- 1    373 Sep 17 20:46 arcade_types.py
drwxr-xr-x 3   4096 Sep 17 20:51 color
-rw-r--r-- 1  57629 Sep 17 20:46 draw_commands.py
-rw-r--r-- 1   4244 Sep 17 20:46 geometry.py
-rw-r--r-- 1    716 Sep 17 20:46 __init__.py
drwxr-xr-x 3   4096 Sep 17 20:51 key
-rw-r--r-- 1  11703 Sep 17 20:46 physics_engine_2d.py
-rw-r--r-- 1   8473 Sep 17 20:46 physics_engines.py
drwxr-xr-x 2   4096 Sep 17 20:51 __pycache__
-rw-r--r-- 1   9409 Sep 17 20:46 shape_objects.py
-rw-r--r-- 1   1931 Sep 17 20:46 sound.py
-rw-r--r-- 1  26546 Sep 17 20:46 sprite.py
-rw-r--r-- 1    332 Sep 17 20:46 test.py
-rw-r--r-- 1    332 Sep 17 20:46 types.py
-rw-r--r-- 1     94 Sep 17 20:46 version.py
-rw-r--r-- 1   6819 Sep 17 20:46 window_commands.py

So I assume it is written in Python (this is the website: http://pythonhosted.org/arcade/index.html)
Comment 5 Sven Brauch 2016-09-22 18:38:32 UTC
Hm, in the sample code I can't even find "import arcade" ...
Comment 6 Gregor Mi 2016-09-23 08:40:27 UTC
Ah, sorry, here is the example code that I experimented with: http://pythonhosted.org/arcade/examples/sprite_move_walls.html (the first non-comment statement is import arcade).

I installed arcade as described here: http://pythonhosted.org/arcade/installation_linux.html

#virtualenv ~/.virtualenvs/arcade -p python3
#instead of the above line, for openSUSE 42.1 I installed the opt python35 package because python >= 3.5 is required: https://software.opensuse.org/package/opt-python35
virtualenv ~/.virtualenvs/arcade -p /opt/python/bin/python3.5
source ~/.virtualenvs/arcade/bin/activate
pip install arcade
# takes a while
Comment 7 Sven Brauch 2016-09-23 10:20:20 UTC
Ok, works perfectly fine here with arcade installed system-wide, so the problem is with paths somehow.

Can you export QT_LOGGING_RULES=kdev.python.duchain.debug=true and watch for the "search paths" line which prints all the search paths?
Comment 8 Gregor Mi 2016-09-23 19:50:00 UTC
```
 ====> DUCHAIN ====>     rebuilding duchain for "/home/gregor/dev/src/tp64/unsorted/kdevelop/pyproj1/arcade1.py" (was built before)
kdev.python.duchain:  --- Search paths from cache:  (QUrl("file:///usr/lib/python34.zip"), QUrl("file:///usr/lib64/python3.4"), QUrl("file:///usr/lib64/python3.4/plat-linux"), QUrl("file:///usr/lib64/python3.4/lib-dynload"), QUrl("file:///home/gregor/.local/lib/python3.4/site-packages"), QUrl("file:///usr/lib64/python3.4/site-packages"), QUrl("file:///usr/lib64/python3.4/_import_failed"), QUrl("file:///usr/lib/python3.4/site-packages"))
kdev.python.duchain: Found module path [path/path in file]:  QPair(QUrl("file:///home/gregor/.virtualenvs/arcade/lib/python3.5/site-packages/arcade/__init__.py"),())
kdev.python.duchain: Declaration identifier: "arcade"
kdev.python.duchain: creating declaration tree for ("arcade")
kdev.python.duchain: really encountered: 0x7fdfb81da690 ; scheduled: ()
kdev.python.duchain: "mixed arcade"
kdev.python.duchain: scheduled: ()
kdev.python.duchain: creating context for  "arcade"
kdev.python.duchain: adding imported context to inner declaration
kdev.python.duchain: closing context
kdev.python.duchain: creating declaration tree for ("arcade", "application")
kdev.python.duchain: Found existing import statement while creating declaration for  "arcade.application"
kdev.python.duchain: remaining identifiers: ("application")
kdev.python.duchain: really encountered: 0x7fdfb80b4f60 ; scheduled: (0x7fdfb80b4f60, 0x7fdfb80eccc0, 0x7fdfb89074f0, 0x7fdfb80fcb90, 0x7fdfb80fb1d0, 0x7fdfb8135ac0, 0x7fdfb8130770, 0x7fdfb82fd9d0, 0x7fdfb809b790, 0x7fdfb81044d0, 0x7fdfb8138b10, 0x7fdfb8138990, 0x7fdfb80ecc40)
kdev.python.duchain: "mixed application"
kdev.python.duchain: scheduled: (0x7fdfb80eccc0, 0x7fdfb89074f0, 0x7fdfb80fcb90, 0x7fdfb80fb1d0, 0x7fdfb8135ac0, 0x7fdfb8130770, 0x7fdfb82fd9d0, 0x7fdfb809b790, 0x7fdfb81044d0, 0x7fdfb8138b10, 0x7fdfb8138990, 0x7fdfb80ecc40)
```

So arcade seems to be found. Maybe it is because kdevelop has only python 3.4 packages in the search path and not any of 3.5?
Comment 9 Sven Brauch 2016-09-23 19:55:53 UTC
That shouldn't be a problem ... i'll have to try that out. Maybe there is a problem with the scheduling for those extra paths, although I have no idea why that would be.
Comment 10 Gregor Mi 2016-09-23 20:07:08 UTC
For comparison I tried again with another library PyQt5. There I have code like this:

```
import sys
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter, QColor, QPen
from PyQt5.QtCore import Qt


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()
...
```

The when I hover over the base class of Example (QWidget) then the documentation is properly shown in the tooltip (and the corresponding QtHelp for C++ can be opened which is cool). Navigation to the corresponding python file is not possible with Ctrl+Click, though.
Comment 11 Sven Brauch 2016-10-23 11:25:50 UTC
Git commit 82729e275d176a81101da98f9af4fd8a465f73c2 by Sven Brauch.
Committed on 23/10/2016 at 11:25.
Pushed by brauch into branch 'master'.

Allow configuring a per-project Python interpreter for search paths.

This introduces rudimentary support for virtualenv, since you can now
set the virtualenv's "python" as the project's interpreter.

M  +2    -1    CMakeLists.txt
M  +1    -1    codecompletion/context.cpp
M  +2    -2    duchain/contextbuilder.cpp
M  +29   -13   duchain/helpers.cpp
M  +4    -4    duchain/helpers.h
A  +52   -0    projectconfig/projectconfig.ui
A  +43   -0    projectconfig/projectconfigpage.cpp     [License: UNKNOWN]  *
A  +45   -0    projectconfig/projectconfigpage.h     [License: GPL (v2+)]
M  +15   -1    pythonlanguagesupport.cpp
M  +3    -0    pythonlanguagesupport.h
M  +1    -1    pythonparsejob.h

The files marked with a * at the end have a non valid license. Please read: http://techbase.kde.org/Policies/Licensing_Policy and use the headers which are listed at that page.


http://commits.kde.org/kdev-python/82729e275d176a81101da98f9af4fd8a465f73c2