- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我继承了 Fortran 77 代码,该代码实现了多个子例程,这些子例程通过程序 block 运行,每次运行程序时都需要通过交互式命令提示符进行大量用户输入。由于我想自动运行代码,因此我将所有子例程移至一个模块中,并通过 F2PY 编写了包装器代码。两步编译后一切正常:
gfortran -c my_module.f90 -o my_module.o -ffixed-form
f2py -c my_module.o -m my_wrapper my_wrapper.f90
这最终会创建三个文件:my_module.o
、my_wrapper.o
、my_module.mod
和 my_wrapper.so
。 my_wrapper.so
是我导入到 Python 中以访问旧版 Fortran 代码的模块。
我的目标是将此代码包含在更大的科学代码包中使用,该代码包已经有一个使用 distutils
构建 Cython 模块的 setup.py
。暂时完全忽略 Cython 代码,我应该如何将两步构建转换为 setup.py 中的扩展?我已经能够弄清楚的关闭看起来像:
from numpy.distutils.core import setup, Extension
wrapper = Extension('my_wrapper', ['my_wrapper.f90', ])
setup(
libraries = [('my_module', dict(sources=['my_module.f90']],
extra_f90_compile_args=["-ffixed-form", ])))],
ext_modules = [wrapper, ]
)
但这不起作用。我的编译器在 my_module.f90
上抛出许多警告,但它仍然可以编译(如果我使用上面的编译器调用,它不会抛出任何警告)。当它尝试编译包装器时,即使已成功创建,也无法找到 my_module.mod。
有什么想法吗?我有一种感觉,我错过了一些微不足道的东西,但文档似乎不够充实,不足以表明它可能是什么。
最佳答案
可能有点晚了,但你的问题是你没有链接到 my_module
构建时my_wrapper
:
wrapper = Extension('my_wrapper', sources=['my_wrapper.f90'], libraries=['my_module'])
setup(
libraries = [('my_module', dict(sources=['my_module.f90'],
extra_f90_compile_args=["-ffixed-form"]))],
ext_modules = [wrapper]
)
如果您只使用my_module
用于my_wrapper
,您只需将其添加到 my_wrapper
的源中即可:
wrapper = Extension('my_wrapper', sources=['my_wrapper.f90', 'my_module.f90'],
extra_f90_compile_args=["-ffixed-form"])
setup(
ext_modules = [wrapper]
)
请注意,这还将导出 my_module
中的所有内容到 Python,您可能不想要它。
我正在Python之外处理这样一个两层库结构,使用cmake
作为顶层构建系统。我已将其设置为 make python
调用 distutils 来构建 Python 包装器。 setup.py
我们可以放心地假设所有外部库都已构建并安装。如果希望拥有在系统范围内安装的通用库,然后为不同的应用程序(例如Python
)进行包装,那么这种策略是有利的。 , Matlab
, Octave
, IDL
,...,它们都有不同的方式来构建扩展。
关于distutils - 将F2PY编译步骤翻译成setup.py,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14805236/
这似乎是一个常见问题,但没有一个答案似乎有帮助。在 Windows 10 中安装 statsmodels 时弹出错误(已安装 python 3.6.2): python setup.py instal
Python 在可用于打包和描述项目的工具方面有着令人困惑的历史:这些工具包括标准库中的 distutils、distribute、distutils2 和 setuptools(可能还有更多)。 d
D:\anzhuang\anconda\lib\distutils\__init__.py:14: UserWarning: The virtualenv distutils package at %
I was trying to have a virtualenv set up where it is at python 3.8 while my system is at a more r
我正在尝试通过安装 nose 并输入 来测试我的 scipy 安装 import scipy scipy.test('1','10') 我遇到了大约 200 个错误,但最常见的错误之一是: ....
我使用sudo apt-get install python3-pip安装了pip3之后,当我运行以下命令来安装Django sudo pip3 install django时,出现此错误: Trac
为什么这会创建 2 个 tar.gz 文件,‘python setup.py sdist ?我正在尝试使用上传twine upload -r pypitest dist/*.tar.gz我得到错误说
在某些情况下,由于pypi服务器已经上传了保存版本,因此我想使python setup.py upload失败时自动执行上传过程中的错误。 如何强制其从脚本上传(我知道我可以使用网络界面删除旧版本)。
我正在linux中编译一些cython扩展,并注意到从distutils机制进行构建时,它默认使用-O2。我想知道是否有一种简单的方法可以将其更改为-O3。 我尝试在Extension对象上使用ext
我继承了 Fortran 77 代码,该代码实现了多个子例程,这些子例程通过程序 block 运行,每次运行程序时都需要通过交互式命令提示符进行大量用户输入。由于我想自动运行代码,因此我将所有子例程移
我有一个简单的纯 python 项目,我想将其与 distutils 一起使用。我已成功为 python 模块和一些许可证文本文件创建压缩 tar 文件。这些是 setup.py 的相关部分setup
我一直在开发一个包含大量文件的 Python 扩展模块。在一台机器上构建时,python setup.py build 会很高兴地检测更改的文件,仅构建这些文件,并将整个文件链接在一起,就像 make
所以可以使用distutils创建文件,比如 PIL-1.1.6.win32-py2.5.exe 您可以运行并使用它来轻松安装某些东西。但是,安装需要用户输入才能继续(您必须单击“确定”三次)。我想创
我已经用 C 编写了一个 Python 扩展库,目前我正在使用 distutils 来构建它。我还有一个生成 .h 文件的 Python 脚本,我想将其包含在我的扩展中。 是否可以使用 distuti
我找到了Question#1321270用于安装后。我目前的主要目标是 bdist_wininst,但我没有找到任何与卸载相关的内容... 澄清一下: 我想在安装后注册一个com服务器并在卸载前取消注
是否可以让 distutils 只运行 python 模块依赖性分析(并可能安装丢失的模块)而不实际安装有问题的 python 模块?我想象一个命令如下: ./setup.py check-depen
我已阅读文档,但我不明白。 为什么我必须使用 distutils 来安装 python 模块? 为什么我不能将模块保存在 python 路径中? 最佳答案 您不必使用 distutils。您可以手动安
我写了一个 boost-python 扩展,目前正在通过 distutils 构建。 不幸的是,我无法在 distutils 中找到一种方法来构建没有调试符号的扩展,或者在安装时从扩展中删除符号。 注
也许是个愚蠢的问题,但我想知道 Python 的 distutils 从哪里获得编译器选项?它得到了一些链接目录错误,我想一劳永逸地纠正它。 我知道应该有一个 prefix/lib/pythonver
例如,我可以使用 python setup.py build --compiler=msvc 或 python setup.py build --compiler=mingw32 或只是 python
我是一名优秀的程序员,十分优秀!