ImportError: DLL load failed while importing QtCore: The specified module could not be found.
-
Hi @Marceepoo, you're most welcome.
@Marceepoo said in ImportError: DLL load failed while importing QtCore: The specified module could not be found.:
On the one hand, Spyder succeeded in running the "Hello World" script you suggested I run.
Great! That means PyQt5 is installed and working.
But on the other hand, here's what transpired in the Command Prompt window:
The regular Windows Command Prompt does not have Anaconda's Python environment set up. You should:
- Run python.exe from your Anaconda Prompt, OR
- Open your script using Spyder and run it there.
-
@JKSH Again, I can't thank you enough.
Proving the truth of the old adage, "No good deed goes unpunished", I have a follow up question.
Hereunto, when I have run a python script, I usually ran it either:- As a "Tool" in EditPad Pro, which I think ran my scripts under the Windows Cmd.exe, as follows:
"C:\ProgramData\Anaconda3\python.exe" "%Python_FILE%"
or
- In a .cmd file, or as a command line being run by vbscript, or by python's subprocess.
[Confession: I don't know whether those uses of Cmd.exe called the Cmd.exe in: (i) C:\Windows\System32, or (ii) C:\Windows\SysWOW64]
So I went hunting for Anaconda's version of Cmd.exe, thinking maybe the command line syntax would be:
[Full Path to Anaconda's Cmd.exe] "C:\ProgramData\Anaconda3\python.exe" "%Python_FILE%"
I checked the Windows properties for the Anaconda Prompt's shortcut to get the shortcut's "Target", i.e., the Full Path to (what I presumed would be) Anaconda's analog to "cmd.exe".
But the shortcut's Target was a little more complicated, to wit:%windir%\System32\cmd.exe "/K" C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3
I am out of my league here. I have no idea how to use that.
What would be the proper command line on a Windows to run, in the Anaconda Prompt, a python script located at "e:\apps\PyQt5script.py"?
Thanks again,
Marc -
@Marceepoo said in ImportError: DLL load failed while importing QtCore: The specified module could not be found.:
%windir%\System32\cmd.exe "/K" C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3
This simply starts a
cmd.exe
, which first runsC:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3
to set up the anaconda environment, and thecmd
(Command Prompt) remains (does not exit). You then sit and execute things.Anaconda does not have "its own" command shell, it's just the regular Windows one. With some variables set up as per
C:\ProgramData\Anaconda3\Scripts\activate.bat
. -
Do you know if there a way for me to send a command line (e.g.: ' "python.exe" "hello_world.py" ') to the Anaconda environment after I run the activate.bat?
I tried running:
%windir%\System32\cmd.exe "/K" C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3 E:\Apps\UtilitiesByMarc\PyQt5_Hello_World.py
But I got the error message,
activate does not accept more than one argument: ['C:\\ProgramData\\Anaconda3', 'E:\\Apps\\UtilitiesByMarc\\PyQt5_Hello_World.py']
So, looking for another alternative, I opened an Anaconda prompt and then found it in Taskmgr's processes window, and then opened the Details link for that process, and got a PID of 15124.
One idea I had is:-
I would run a Vbscript that would call/trigger the Anaconda prompt shortcut and get the PID of the instance of cmd.exe that the shortcut created; and then, ...
-
I would use the PID to somehow send to that instance of cmd.exe, the following command line:
' "C:\ProgramData\Anaconda3\python.exe" "e:\hello_world.py" '
Of course, I haven't yet figured out how to do that.
I would appreciate any suggestions about where to get help that would enable me to use PyQt for the python scripts I use for copying files, performing searches for files or in files, etc.
Thank you again.
Marc -
-
Just call Anaconda's
activate.bat
script before calling your own script:> C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3 > python.exe E:\Apps\UtilitiesByMarc\PyQt5_Hello_World.py
(Note: After activating, python.exe will be placed in your PATH so you don't need to specify the full path anymore)
-
@Marceepoo
I am a little lost as to what you are actually trying to achieve.Are you trying to run this python stuff outside of Qt? Are the python scripts your actual Qt application? Are you trying to run these python scripts as sub-processes from your Qt application via
QProcess
? Or what?If you are sitting in your own Command Prompt you can just execute two statements like @JKSH shows. The first sets the environment used by the second. You can also then continue to execute further python scripts in that shell by only doing the second line (
python.exe ...
) as the environment has been set from the first line.Earlier on you were using
cmd.exe /K
, which creates a new Command Prompt and Keeps it in existence. (Wherecmd.exe /C
would run a command and then exit the Command Prompt.) I'm not sure how that relates to your situation/what you want to happen.To do normal conda development work, one normally opens a Command Prompt and type in the first command, to set that shell's environment. You could set up a shortcut like
cmd /k C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3
to achieve that. Then you keep that and keep typing in the variouspython.exe ...
lines to run things. If you want the first thing it does to be the "Hello World" then do the "Hello", and then stay, you can do that in one line/from a shortcut via:cmd /k "C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3 & python.exe E:\Apps\UtilitiesByMarc\PyQt5_Hello_World.py"
-
@JonB said in ImportError: DLL load failed while importing QtCore: The specified module could not be found.:
cmd /k "C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3 & python.exe E:\Apps\UtilitiesByMarc\PyQt5_Hello_World.py"
That was the exactly the solution I was looking for. Thank you sooo much. Often for me, the hardest part is explaining what I am trying to do without providing too long a description. Thank you for seeing what I needed, and showing me how to do it. Much appreciated.
-
The solution is to provide the python interpreter with the path-to-your-module. The simplest solution is to append that python path to your sys.path list. In your notebook, first try:
import sys sys.path.append('my/path/to/module/folder')
This isn't a permanent change in sys.path, because when you log out, your environment is reset, so any variables you may have set are lost.
The better (and more permanent) way to solve this is to set your PYTHONPATH, which provides the interpreter with additional directories look in for python packages/modules.
from BASH type: export PYTHONPATH=/path/to/new/folder:/another/path/...../ #each path must be separated by a colon