py4web and Eclipse/PyDev

68 views
Skip to first unread message

David Zejda

unread,
Nov 13, 2019, 5:29:21 AM11/13/19
to web2py-users
Hi to all,

to start experimenting with py4web in Eclipse/PyDev on Debian Linux I did the following.
Maybe someone will find it useful.

Debugging is not working yet for me, an advice would be welcome.

1) Set-up the virtual environment for web4py with libraries managed by pip (to avoid mixing with system-wide python libraries installed by the Debian packaging system):

sudo apt-get install virtualenvwrapper
pip3 install --user --upgrade virtualenvwrapper
mkvirtualenv -p /usr/bin/python3 /opt/python3env/py4web
cd /opt/python3env/py4web/bin


2) Install py4web by pip.

./pip3 install py4web
./python3 -c "from pydal.validators import CRYPT; open('/opt/py4web/password.txt','w').write(str(CRYPT()(input('password:'))[0]))"


Test if it is working:

./py4web-start /opt/py4web -p /opt/py4web/password.txt

3) Create a new PyDev project for the whole py4web apps directory:

Start Eclipse, create a new PyDev project with the source directory /opt/py4web

Define the interpreter /opt/python3env/py4web/bin/python3 for the project; in its definition at first add the system libraries:

/opt/python3env/py4web/lib/python3.7 /opt/python3env/py4web/lib/python3.7/lib-dynload /opt/python3env/py4web/lib/python3.7/site-packages

As a result, PyDev complained: "It seems that the Python /Lib folder (which contains the standard library) was not found /selected during the instal process. This folder (which contains files such as threading.py and traceback.py) is required for PyDev to function properly ...". To solve it, at first I tried symlinking the mentioned files:

ln -s /usr/lib/python3.7/threading.py /opt/python3env/py4web/lib/threading.py
ln -s /usr/lib/python3.7/traceback.py /opt/python3env/py4web/lib/traceback.py


The complaint has disappeared and I have not noticed any other apparent problems. However, to be sure that everything needed is available, later I added the whole /usr/lib/python3.7 in libraries instead of the symlinked files.
Because only system libraries are imported and not site-packages, hopefully this second solution won't break the virtualenv separation from the system environment.

4) Enable launching py4web from Eclipse:

Copy web4py starting script to the apps directory:

cp /opt/python3env/py4web/bin/py4web-start /opt/py4web/py4web-start.py

Define new run configuration for py4web-start.py with the arguments "/opt/py4web -p /opt/py4web/password.txt".

Now I can start py4web from Eclipse and read its output in the Eclipse console.

5) PyDev Debugging:

However, for now, I got stuck in making the PyDev debugger working. It complains:

pydev debugger: starting (pid: 27370)
Traceback (most recent call last):
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/opt/python3env/py4web/lib/python3.7/site-packages/py4web/__init__.py", line 1, in <module>
    from . core import (
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 152, in __exit__
  File "<frozen importlib._bootstrap>", line 107, in release
RuntimeError: cannot release un-acquired lock

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 152, in __exit__
  File "<frozen importlib._bootstrap>", line 107, in release
RuntimeError: cannot release un-acquired lock

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/zejdad/.p2/pool/plugins/org.python.pydev.core_7.4.0.201910251334/pysrc/pydevd.py", line 3090, in <module>
    main()
  File "/home/zejdad/.p2/pool/plugins/org.python.pydev.core_7.4.0.201910251334/pysrc/pydevd.py", line 3083, in main
    globals = debugger.run(setup['file'], None, None, is_module)
  File "/home/zejdad/.p2/pool/plugins/org.python.pydev.core_7.4.0.201910251334/pysrc/pydevd.py", line 2154, in run
    return self._exec(is_module, entry_point_fn, module_name, file, globals, locals)
  File "/home/zejdad/.p2/pool/plugins/org.python.pydev.core_7.4.0.201910251334/pysrc/pydevd.py", line 2161, in _exec
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "/home/zejdad/.p2/pool/plugins/org.python.pydev.core_7.4.0.201910251334/pysrc/_pydev_imps/_pydev_execfile.py", line 25, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "/opt/py4web/py4web-start.py", line 3, in <module>
    from py4web.core import main
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 152, in __exit__
  File "<frozen importlib._bootstrap>", line 107, in release
RuntimeError: cannot release un-acquired lock


With regards,
David
Reply all
Reply to author
Forward
0 new messages