我有一个用C编写的Python扩展,我想知道我是否应该在Windows下使用文件扩展名DLL或PYD.(我会在Linux中使用什么?)
有没有差异(除了文件名)?
我发现了一篇非官方的文章.这是pyc的秘密吗?为什么我找不到关于这个主题的官方文章?
阅读后如何保护Python代码?,我决定在Windows上尝试一个非常简单的扩展模块.我之前在Linux上编译了自己的扩展模块,但这是我第一次在Windows上编译它.我期待得到一个.dll文件,但相反,我得到了一个.pyd文件.Docs说他们有点相同,但它必须有一个init[insert-module-name]()功能.
假设它是安全的,像dll文件一样难以对它们进行反向工程.如果没有,那么从.pyc文件到.dll文件的规模进行逆向工程的硬度是多少?
有没有办法反编译一个DLL和/或.pyd文件,以提取用Python编写的源代码?
提前致谢
我的应用程序的一个模块使用.pyd文件中的函数.有一个选项可以排除dlls(exclude_dlls),但有一个包含它们吗?尽管复制了其余的文件(.py),构建过程似乎并没有复制模块中的.pyd.我还需要包含一个.dll.如何让py2exe包含.pyd和.dll文件?
我有一个 python 模块module.pyd,一旦它被手动放到 python 安装文件夹的站点包上,它就可以正常工作。
当我将我的解决方案上传到云环境时,问题就开始了,buildpack 要求我将每个模块作为一个包传递给pip install module. 我用一个简单的__init__.py文件创建了一个文件夹,该文件只导入module.pyd 的所有内容,以便我的模块被视为一个文件夹。
然后我在这里阅读了http://peterdowns.com/posts/first-time-with-pypi.html如何上传我自己的模块并且我成功了,但是当我安装我的模块时,module.pyd文件没有被复制。我也尝试通过存储库直接安装它,pip install git+repository但发生了同样的事情。
我在这里阅读了https://docs.python.org/2/distutils/sourcedist.html#specifying-the-files-to-distribute我可能不得不明确地说我想在清单中复制*.pyd文件。在文件中,我已经完成了,但似乎还没有工作。
我目前使用 python 2.7.10
我是 python 新手,所以我很感激你们的帮助
我正在使用 PyCharm。我在以下位置有一个 python 脚本:
C:\Users\XYZ\PycharmProjects\Project1\playground.py
Run Code Online (Sandbox Code Playgroud)
playground.py 只有一行代码,如下所示:
import PyTbl
Run Code Online (Sandbox Code Playgroud)
在Project1文件夹中有另一个文件:
C:\Users\XYZ\PycharmProjects\Project1\PyTbl.pyd
Run Code Online (Sandbox Code Playgroud)
当我运行 Python 脚本时playground.py,出现以下错误:
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 exception
Run Code Online (Sandbox Code Playgroud)
如果我将鼠标悬停playground.py在 PyCharm 编辑器中的 Python 代码行上,我会收到以下错误消息:
"No module named PyTbl"
Run Code Online (Sandbox Code Playgroud)
知道我应该如何将.pyd文件导入 Python 脚本吗?
我正在尝试使用 Python 加载 *.pyd,但收到众所周知的“导入错误:DLL 加载失败:找不到指定的过程”。错误。
我已经完成了以下操作:
1.) 使用 Dependency Walker 研究 *.pyd。GPSVC.DLL 和 IESHIMS.DLL 出现丢失,但延迟加载,IEFRAME.DLL 也出现丢失导出,但也是延迟加载。据我了解,这些没有被使用,并且无论如何都是延迟加载,所以它们不应该是问题。
2.) 在 python 命令窗口中对 foo.pyd 执行“import foo”,并用 ProcMon 进行监视。ProcMon 在“foo.pyd”上显示事件“LoadImage”,结果成功。
这似乎意味着 *.pyd 文件已正确加载。
那么我错过了什么。我的 Windows 诊断告诉我一切都很好,但 python 告诉我无法加载该东西(通常是由于缺少 dll 或符号)。
有想法吗?
谢谢!
我需要一个交互式环境,我可以使用一个很好的脚本语言和一些体面的科学绘图库(例如python)来动态调用d函数.
有没有办法从shell调用d函数(Ipython或类似的)?我看着pyd,但似乎已经过时了.
我正在尝试找出反编译python .pyd文件的最佳方法。我到处看起来都死胡同。除了Aaron Portnoy和Ali Rizvi-Santiago在2008年展示的“ Antifreeze”外,似乎没有任何程序可以做到这一点。但是,该项目早已丢失并被放弃。
我昨天在推特(Aaron Portnoy)上与该程序的一位开发人员进行了交谈。这是对话。
所以我的问题是,如何轻松地反编译包含冻结的python对象的.pyd。
要么
如Aaron所指出的,我将如何使用.pyo和.pyc修改其中的一个反编译器来反编译.pyd?如果这是我最终要做的事情,那么哪一个最好呢?
要么
如果您有防冻剂或知道从何处获得防冻剂,那将是一个奇迹。甚至开发人员也不知道从哪里获得。我已经搜索了好几天没有运气了。
我正在尝试为包含Cython模块的Python 3.4应用程序构建setup.py包.我的计划是有一个setup.py文件需要Cython并编译.pyx文件的想法通常我会在Win32(x86和x64)和Mac上运行它然后生成平台轮并将它们上传到PyPI,所以普通用户不需要Cython或编译任何东西.
目前我可以获取setup.py脚本来构建.pyd文件,但是它不会将构建的.pyd文件放在与原始.pyx文件相同的位置,这是我需要它的地方.
我尝试手动复制.pyd文件,但是当我通过bdist_wheel生成轮子时,我得到一个纯Python轮,我认为是错误的,因为根据平台,我的内置.pyx文件有不同版本.我还尝试了对Distribution类进行子类化并强制is_pure()返回False(如此处在Building Wheels部分中所述),但这不起作用.(仍然生成纯Python轮.)
我假设如果我可以获得setup.py脚本将编译后的文件放在正确的位置,那么轮子将不是纯Python,一切都会好的.
所以我的问题是:
有关我的设置的更多信息:我在setup.py脚本中使用setuptools(而不是distutils).我的setup.py的片段在这里(删除了很多东西以保持相关的东西):
from setuptools import setup, Extension
from Cython.Build import cythonize
from Cython.Distutils import build_ext
...
extensions = [
Extension(name='audio_interface',
sources=['mpf/mc/core/audio/audio_interface.pyx'],
include_dirs=include_dirs,
library_dirs=library_dirs,
libraries=libraries,
extra_objects=extra_objects,
extra_compile_args=extra_compile_args,
extra_link_args=extra_link_args),
...
setup(
...
ext_modules=cythonize(extensions),
cmdclass= {'build_ext': build_ext},
...
Run Code Online (Sandbox Code Playgroud)
谢谢!布赖恩
pyd ×10
python ×10
dll ×3
cython ×1
d ×1
decompiling ×1
extraction ×1
include ×1
installation ×1
procmon ×1
py2exe ×1
pyc ×1
pycharm ×1
pypi ×1
python-2.7 ×1
setuptools ×1
shell ×1
windows ×1