我已经在使用SWIG在Python中移植一些C++库,我对结果的质量印象深刻.所以我想坚持使用SWIG ..
最近有人问我一个Matlab端口.这个想法实际上已经在我的todolist中 ..但是每次我用Google搜索时都没有发现任何足够稳定且易于维护的东西(也是因为我使用Matlab的低技能及其几种调用C/C++的方法码).
根据我的理解,在主分支中有一种不受维护且几乎没有记录的方法可以做到这一点,并且在这样一个方向上的许多其他尝试都没有达到足够的成熟度而成为主要分支的一部分:链接.我想成为跨平台,因此我不认为COM方式可能是我的解决方案.
然而,这次我发现有一个看起来非常有希望的分支:链接 有人已经测试过这个解决方案吗?在这种情况下,从Matlab调用移植的C++代码的简单工作示例将非常有用.
编辑1:我删除了对C++ 11的任何引用
编辑2:matlab分支(在答案中引用)目前正在评估中与swig主人合并(参见:https://github.com/jaeandersson/swig/issues/72和https://sourceforge.net/p/ swig/mailman/message/35209729 /)
我正在将2D Eigen::Array用于项目,我喜欢在大型2D阵列的情况下继续使用它们.
为了避免内存问题,我想使用内存映射文件来管理(读取/修改/写入)这些数组,但我找不到工作示例.
我发现最近的例子是此基础上boost::interprocess,但它使用的共享内存(而我更愿意有持久存储).
缺乏示例让我担心是否有更好的主流替代解决方案来解决我的问题.是这样的吗?一个最小的例子非常方便.
编辑:
这是在评论中解释我的用例的最小示例:
#include <Eigen/Dense>
int main()
{
// Order of magnitude of the required arrays
Eigen::Index rows = 50000;
Eigen::Index cols = 40000;
{
// Array creation (this is where the memory mapped file should be created)
Eigen::ArrayXXf arr1 = Eigen::ArrayXXf::Zero( rows, cols );
// Some operations on the array
for(Eigen::Index i = 0; i < rows; ++i)
{
for(Eigen::Index j = 0; j < cols; ++j)
{
arr1( i, …Run Code Online (Sandbox Code Playgroud) 我试图spatialite在Windows 7上同时使用Python 2和3.
而不是试图修补pyspatialite的Python 3,我决定用load_extension与方法sqlite3Python的内置包,类似于这里是如何做的:sqlite的load_extension在Python失败spatialite这里:使用spatialite扩展SQLite的Windows上.
但是,在官方(C)Python 2.7安装程序上,load_extension已针对与MacOS相关的问题禁用了该安装程序.这与Python 3.4的对应物不同.此外,两个安装程序都是在没有SQLITE_ENABLE_RTREE=1(我也想拥有)的情况下构建的.
首先,对于Python 2.7,一种解决方法是构建pysqlite调整安装文件以同时拥有R*Tree和扩展.这种方式不适用于Python 3,因为它似乎不受当前支持setup.py.据我所知,这是因为包移到了核心Python存储库:https://github.com/ghaering/pysqlite/issues/72#issuecomment-94319589
我目前的解决方案是使用所需的sqlite3包设置重新构建Python 2.7和3.4 .它工作,我能够加载spatialite作为扩展并创建R*树.
它是否存在替代的更简单的解决方案?难道有人找到对工作的替代解决方案setup.py的pyspatialite还是pysqlite?
在Windows上,我需要在Python中使用一些用C++编写的自定义Qt5小部件,pyside2因为它的许可证我必须使用它.
我已经能够pyside2从源代码编译库(连同shiboken2示例),但我无法找到如何包装自定义Qt5小部件的简单示例.
我知道pyside2仍然没有正式发布,但它似乎已经被使用(例如,在Maya中):在PySide2应用程序中,我如何获得QWindow的ID?
任何人都可以给出提示或指示吗?一个最小的例子会更好.
编辑
根据@placinta评论,我创建了一个包含一个最小示例的repo,它试图包装一个自定义QMainWindow.
在我的测试中,我使用了包装5.6 的pyside2 Conda包Qt.
当我执行shiboken2可执行文件时,我收到了大量的警告.
我认为这些警告触发编译错误与shiboken2生成的代码.
我可以自定义iPython笔记本服务器(版本2.3)的登录页面吗?
我的意思是,在起始页面(类似于:) http://localhost:8888/tree,我想显示欢迎来到John Doe的i [Py]笔记本或修改现有的横幅..这可能吗?
在 Windows 上,我有一个 Python 库 (*.pyd),我需要检查链接的 Python 版本。它可以是 Python 2.7.x 或 3.x。
当我使用以下命令运行类似的操作时win32api(改编自此处: https: //stackoverflow.com/a/20064736/2741329):
def get_pyd_python_version(pyd_path):
"""
Get the python version required by the passed pyd library
"""
import win32api
print("- pyd path: %s" % str(pyd_path))
try:
info = win32api.GetFileVersionInfo(pyd_path, '\\')
except win32api.error as e:
print(str(e.strerror) + " > " + pyd_path)
return ""
python_version = "%s.%s.%s.%s" % (
str(win32api.HIWORD(info['FileVersionMS'])),
str(win32api.LOWORD(info['FileVersionMS'])),
str(win32api.HIWORD(info['FileVersionLS'])),
str(win32api.LOWORD(info['FileVersionLS'])))
return python_version
Run Code Online (Sandbox Code Playgroud)
我得到:The specified resource type cannot be found in the image …