从c中嵌入的python代码加载DLL

从c中嵌入的python代码加载DLL,python,c,embedding,Python,C,Embedding,我的问题的关键是: 我正在用MSVisualStudio10.0在WindowsXP上用C开发代码,我需要嵌入Python来做一些绘图、文件管理和其他事情。我在sys.path查找纯Python模块时遇到问题,但通过修改PYTHONPATH解决了这个问题 现在,我的问题是让python找到一些模块引入的动态库。特别是,我的问题是将文件夹压缩到同名的bzip2文件夹中 在普通的python命令提示符下,这一切都很好: import tarfile tar=tarfile.open('Code.ta

我的问题的关键是:

我正在用MSVisualStudio10.0在WindowsXP上用C开发代码,我需要嵌入Python来做一些绘图、文件管理和其他事情。我在sys.path查找纯Python模块时遇到问题,但通过修改PYTHONPATH解决了这个问题

现在,我的问题是让python找到一些模块引入的动态库。特别是,我的问题是将文件夹压缩到同名的bzip2文件夹中

在普通的python命令提示符下,这一切都很好:

import tarfile
tar=tarfile.open('Code.tar.bz2','w:bz2')
tar.add('Code',arcname='Code')
tar.close()
但当我从c代码调用此代码时,它会给我以下错误:

Traceback (most recent call last):
  File "<string>", line 4, in <module>
  File "D:\My_Documents\Code\ScrollModel\trunk\PythonCode.py", line 20, in Colle
ctFiles
    tar=tarfile.open(os.path.join(runPath,'CODE.tar.bz2'),'w:bz2')
  File "c:\Python26\lib\tarfile.py", line 1671, in open
    return func(name, filemode, fileobj, **kwargs)
  File "c:\Python26\lib\tarfile.py", line 1737, in bz2open
    raise CompressionError("bz2 module is not available")
tarfile.CompressionError: bz2 module is not available
它也不起作用,我感到恐惧

有人遇到过这样的问题吗?我遗漏了一些重要的东西吗?

嘿,我问了一个问题,我的操作系统是Linux

编译c文件时,应该添加选项
$(python config--cflags--ldflags)
,如下所示

gcc test.c$(python配置--cflags--ldflags)-o测试


我认为在Windows中,您也可以选中
python-config
选项,希望这对您有所帮助

>P>与Boost C++ DLL有类似的问题。任何外部DLL都需要位于DLL搜索路径中

根据我的经验,PYTHONPATH影响Python模块(Python中的import语句将以LoadLibrary调用结束),而构建选项与此无关

加载DLL时,Windows不关心进程是什么。换句话说,Python遵循与记事本相同的原则。通过将任何丢失的DLL复制到与python扩展相同的目录中,或复制到路径中的目录中,可以确认您正面临Windows路径问题


要查找任何其他可执行文件或DLL所需的DLL,只需使用打开DLL或EXE文件即可。还有一个“配置文件”菜单,可以让您运行应用程序并查看它的搜索和加载DLL。

试试这个,它在我的机器上工作

在Visual Studio 2010中创建一个简单的Windows控制台应用程序(在向导中删除预编译头选项)。用以下代码替换生成的代码:

#include <Python.h>

int main(int argc, char *argv[]) {
    Py_Initialize();

    PyRun_SimpleString("import ssl        \n"
                       "for f in dir(ssl):\n"
                       "    print f       \n" );

    Py_Finalize();
    return 0;
}

我尝试将包含DLL的文件夹添加到PATH,并尝试将它试图打开的DLL移动到c:\windows\system32,但这两种方法似乎都没有帮助。
#include <Python.h>

int main(int argc, char *argv[]) {
    Py_Initialize();

    PyRun_SimpleString("import ssl        \n"
                       "for f in dir(ssl):\n"
                       "    print f       \n" );

    Py_Finalize();
    return 0;
}
gcc -Wall -o test.exe embeed.c -I%PYTHONHOME%\Include -L%PYTHONHOME%\libs -lpython26