How to import a .pyd file as a python module?
Solution 1
.pyd is basically a Windows .dll file.
.pydfiles aredll’s, but there are a few differences. If you have a DLL named foo.pyd, then it must have a functionPyInit_foo(). You can then write Pythonimport foo, and Python will search forfoo.pyd(as well asfoo.py,foo.pyc) and if it finds it, will attempt to callPyInit_foo()to initialize it. You do not link your .exe withfoo.lib, as that would cause Windows to require the DLL to be present.Note that the search path for
foo.pydis PYTHONPATH, not the same as the path that Windows uses to search forfoo.dll. Also,foo.pydneed not be present to run your program, whereas if you linked your program with adll, thedllis required. Of course,foo.pydis required if you want to sayimport foo. In a DLL, the linkage is declared in the source code with__declspec(dllexport). In a.pyd, linkage is defined in a list of available functions.
Solution 2
One thing that will work for sure is to set the PYTHONPATH environment variable before launching PyCharm to include the directory where the .pyd file is. I don't know if there's a simpler way of doing this within PyCharm itself.
Related videos on Youtube
chengcj
By Day: Quant Analyst at Citi By Night: Android App Developer Have experience in C++ and Python
Updated on August 09, 2021Comments
-
chengcj about 2 yearsI am using PyCharm. I have a python script in the following location:
C:\Users\XYZ\PycharmProjects\Project1\playground.pyplayground.pyonly has a line of code as shown below:import PyTblIn the
Project1folder there's another file:C:\Users\XYZ\PycharmProjects\Project1\PyTbl.pydWhen I run the Python script
playground.pyI get the following error:ImportError: numpy.core.multiarray failed to import Traceback (most recent call last): File "C:/Users/XYZ/PycharmProjects/Project1/playground.py", line 1, in <module> import PyTbl SystemError: initialization of PyTbl raised unreported exceptionIf I hover my mouse over the line of Python code in
playground.pyin the PyCharm editor I get the following error message:"No module named PyTbl"Any idea how should I import a
.pydfile into a Python script?-
BoarGules over 5 yearsYour import statement is correct. That is how you import a.pydfile. But it isn't Python, it is object code, probably originally C. If the DLL doesn't load, that usually because (1) it is trying to load another DLL that is missing or not findable; or (2) you have a 32-bit system and your code is trying to load a 64-bit DLL, or vice versa.
-
-
Contango about 3 yearsBrilliant! Confirmed works well with PyCharm 2020.2. Remember to restart PyCharm after setting the environment variable. -
Juv over 2 yearsIn addition, since I used python boost I needed to do a some more tweaks: 1. Python Boost 1.7.6 works with Python 3.9.x - Installed python 3.9.x 2. In PyCharm project settings, set the interpreter as Phython 3.9 3. In Visual Studio - make the output file as pyd ($(OutDir)$(TargetName)$(TargetExt) --> $(OutDir)$(TargetName).pyd) - this is nice to have, to avoid manual rename 4. The name of the pyd must be the same as the name of the package you want to import (I.e. PyInit_<pyd file name no extension>, e.g. "MyPackage.pyd" should have an exposed PyInit_MyPackage). 5. ...