Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Copy DLL to Python site packages #187

Open
technikamateur opened this issue May 24, 2024 · 8 comments
Open

Copy DLL to Python site packages #187

technikamateur opened this issue May 24, 2024 · 8 comments

Comments

@technikamateur
Copy link

technikamateur commented May 24, 2024

Hi everybody,
I created a project based on this example. What my project basicaly does, is fetching data from an API. The API consists of a .lib, .h and .DLL file. I included the .h file in my CPP code and added the .lib via target_link_libraries in CMakeLists.txt.

After running pip install . the .pyd file gets copied to site packages, but after an import in python it fails because of the missing .DLL

I solved the problem by copying the DLL next to the pyd under site packages, but would like to automate this process. What would be the best way, to accomplish this?

I already tried adding package_data to setup.py without success.

@Xevion
Copy link

Xevion commented May 29, 2024

I'm not super familiar with this system and learning it myself, but is this something that MANIFEST.in would do?

@henryiii
Copy link
Collaborator

I would highly recommend using pybind/scikit_build_example. This is the old way to do things, and is much harder to use and prone to breaking with every setuptools release. There you should be able to install the .DLL (install command in CMake).

@mfatih7
Copy link

mfatih7 commented Jul 24, 2024

Hello @technikamateur

I have a similar problem.
I am using VSCODE with Python 3.10.14 to generate .pyd files.

The file "example.cp310-win_amd64.pyd" is generated.
But I get the error "ImportError: DLL load failed while importing example: The specified procedure could not be found." during python import.

Which .dll did you place near the .pyd file?

@technikamateur
Copy link
Author

Which .dll did you place near the .pyd file?

The .dll of the libraries I am using in my C code.

@technikamateur
Copy link
Author

technikamateur commented Jul 24, 2024

And thanks @henryiii . I will look into it. So there is no way to do it with this project?

@henryiii
Copy link
Collaborator

You should be able to use CMake to copy the DLL in the right spot. Though cmake does some path fixing when it installs, which this project doesn't include, but if you are manually copying it and it works, you should be able to copy it with CMake too.

@mfatih7
Copy link

mfatih7 commented Jul 24, 2024

Hello again

When I generate the .pyd file with VSCODE on a computer with Visual Studio 17 2022, the generated example.pyd can easily be imported from Python scripts.

The log printed during examle.pyd generation is like below:

*  Executing task: cmake -S C:\Users\THE_USER\Desktop\pybind11_00 -B C:\Users\mfatih\Desktop\pybind11_00/build 

-- Building for: Visual Studio 17 2022
-- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.19045.
-- The C compiler identification is MSVC 19.37.32824.0
-- The CXX compiler identification is MSVC 19.37.32824.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.37.32822/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features       
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.37.32822/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Python3: C:/ProgramData/anaconda3/envs/env3_11/python.exe (found version "3.11.9") found components: Interpreter Development Development.Module Development.Embed
CMake Deprecation Warning at thirdparty/pybind11/CMakeLists.txt:8 (cmake_minimum_required):
 Compatibility with CMake < 3.5 will be removed from a future version of
 CMake.

 Update the VERSION argument <min> value or use a ...<max> suffix to tell
 CMake that the project does not need compatibility with older versions.


-- pybind11 v2.9.2 
-- Performing Test HAS_MSVC_GL_LTCG
-- Performing Test HAS_MSVC_GL_LTCG - Success
-- Configuring done (6.9s)
-- Generating done (0.1s)
-- Build files have been written to: C:/Users/THE_USER/Desktop/pybind11_00/build
*  Terminal will be reused by tasks, press any key to close it. 

*  Executing task: cmake --build C:\Users\THE_USER\Desktop\pybind11_00/build --target example 

I am still not sure that pybind11 is compatible with VSCODE usage.
You can check here.
It is written that:
On Windows, only Visual Studio 2017 and newer are supported.

I can share the VSCODE project if needed.

@mfatih7
Copy link

mfatih7 commented Jul 26, 2024

Hello

Now .pyd generation and .pyd import give no error.
The problem in my case was only related to the compiler. Using Visual Studio compiler is fine for evrything.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants