介绍
免责声明:我对使用distutils进行Python打包非常新,到目前为止,我只是将所有内容手动存储到模块和包中,并在此基础上开发。我以前从未编写过setup.py
文件。
我有一个Fortran模块,我想在我的Python代码中与numpy一起使用它。我想到的最好的方法是使用f2py,因为它包含在numpy中。为了自动化构建流程,我想使用distutils和相应的numpy增强功能,其中包括方便的f2py包装器函数。
我不明白应该如何组织我的文件,以及如何包含我的测试套件。
我想要的是能够使用./setup.py
进行构建、安装、测试和开发的可能性。
我的目录结构如下:
volterra
├── setup.py
└── volterra
├── __init__.py
├── integral.f90
├── test
│ ├── __init__.py
│ └── test_volterra.py
└── volterra.f90
而 setup.py
文件包含以下内容:
def configuration(parent_package='', top_path=None):
from numpy.distutils.misc_util import Configuration
config = Configuration('volterra', parent_package, top_path)
config.add_extension('_volterra',
sources=['volterra/integral.f90', 'volterra/volterra.f90'])
return config
if __name__ == '__main__':
from numpy.distutils.core import setup
setup(**configuration(top_path='').todict())
在运行./setup.py build
之后,我得到了:
build/lib.linux-x86_64-2.7/
└── volterra
└── _volterra.so
其中不包括__init__.py
文件和测试。
问题
- 是否真的需要为每个扩展源文件(即
volterra/integral.f90
)添加路径?我不能给一个参数,说在volterra/
中寻找东西吗?top_path
和package_dir
参数行不通。 - 目前构建中没有包含
__init__.py
文件。为什么会这样? - 如何在这种设置中运行我的测试?
- 在这种环境下进行开发的最佳工作流程是什么?我不想每次更改时都要安装我的软件包。当您需要编译某些扩展模块时,在源目录中进行开发的最佳方法是什么?
其中不包括__init__.py
文件和测试。
问题
- 是否真的需要为每个扩展源文件(即
volterra/integral.f90
)添加路径?我不能给一个参数,说在volterra/
中寻找东西吗?top_path
和package_dir
参数行不通。 - 目前构建中没有包含
__init__.py
文件。为什么会这样? - 如何在这种设置中运行我的测试?
- 在这种环境下进行开发的最佳工作流程是什么?我不想每次更改时都要安装我的软件包。当您需要编译某些扩展模块时,在源目录中进行开发的最佳方法是什么?
__init__.py
文件是包的一部分,应该自动包含,而无需我在清单中手动指定,对吧?否则,如果自动生成的清单甚至不包括包,那么自动清单生成的意义何在? - Lemming#在导入distutils之前,删除MANIFEST。当目录内容发生更改时,distutils无法正确更新它。
- rtrwalker