[PyQt] ImportError on pyqtdeploy project

Marius Shekow marius.shekow at fit.fraunhofer.de
Thu Apr 28 12:40:23 BST 2016


Hi,

I'm unable to start my Python 3.5.1 + Qt 5.5.1 Windows binary which I 
created using pyqtdeploy v1.2.1.

My project/source structure is as follows:

C:\codeprojects\myproject\sources\subproject1   < contains the source 
code of my project, also the entry point and all the Qt UI stuff. Uses 
also code from C:\codeprojects\myproject\sources\subproject2
C:\codeprojects\myproject\sources\subproject2   < a different project 
(like a library)

The C:\codeprojects\myproject\sources\ directory as well as all relevant 
sub-directories are *packages*, i.e. I did put a __init__.py file in 
each of these.

When I work in the IDE (Pycharm), I set both the subproject1 and 
subproject2 as sources root (so PyCharm puts them into sys.path).

I have done the following in pyqtdeploy:

  * Clicked on scan and selected C:\codeprojects\myproject\sources 
    (because I need the code of both subproject1 and 2, so I selected
    the directory that is one level higher), clicked on "Include all"
    and removed the checkboxes of those sub-packages that I don't need
    to be distributed (e.g. Test-Suite code)
  * Entered this into "Entry point": sources.subproject1.main_gui:main
  * I left the "Main script file" form field empty
  * Entered this into sys.path (without quotes): ":/sources/subproject1
    :/sources/subproject2" (space-delimited list)

When freezing the application, this creates a *build* directory next to 
my pyqtdeploy project file, inside that build directory the *resources* 
directory has the *sources* dir (among others) which contains the frozen 
pyo files, as expected.

When I try to start my exe file, I get the following output:
Traceback (most recent call last):
   File "bootstrap.py", line 969, in _find_and_load
   File "bootstrap.py", line 958, in _find_and_load_unlocked
   File "bootstrap.py", line 664, in _load_unlocked
   File "bootstrap.py", line 634, in _load_backward_compatible
   File ":/sources/subproject1/main_gui.py", line 4, in <module>
   File "bootstrap.py", line 969, in _find_and_load
   File "bootstrap.py", line 944, in _find_and_load_unlocked
   File "bootstrap.py", line 222, in _call_with_frames_removed
   File "bootstrap.py", line 969, in _find_and_load
   File "bootstrap.py", line 956, in _find_and_load_unlocked
ImportError: No module named 'gui_simple'

This is what line 4 of subproject1/main_gui.py looks like:

from gui_simple.mainwindowimport MyMainWindow

The corresponding directory and file is located at:

C:\codeprojects\myproject\sources\subproject1\gui_simple\mainwindow.py

So it should be correct that this line looks for a package or module 
named "gui_simple" (rather than "sources.subproject1.gui_simple..."), 
because it should really be found (due to setting sys.path).

I also checked what sys.path looks like (by doing a *import sys + 
print(str(sys.path)) *). This is the output, I don't know whether this 
is fine or not:

[':/', ':\\sources\\subproject1', ':\\sources\\subproject2']

Any ideas?

The only way the import works is if I replace

from gui_simple.mainwindowimport MyMainWindow

with

from sources.subproject1.gui_simple.mainwindowimport MyMainWindow

But I really don't want to do that. This is what sys.path is for, after 
all!!

Cheers!
Marius

Note: injecting *help('modules')* into my subproject1\main_gui.py (to be 
able to discover which modules are available) also failed with 
"NameError: name 'help' is not defined"

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20160428/0dcd85e1/attachment.html>


More information about the PyQt mailing list