我正在使用distutils设置软件包。
我需要允许访问在设置过程中建立的模块,该模块位于./build/temp.linux-x86_64-3.6
中。我通过添加
include_dirs=["./build/temp.linux-x86_64-3.6"]
在将扩展名添加到distutils配置时。
我的问题是有一种使用通配符来设置它的方法,例如:
include_dirs=["./build/temp.linux*"]
当我尝试此操作时,由于错误而失败:
Nonexistent include directory ‘build/temp.linux*’ [-Wmissing-include-dirs]
我想要这个的原因是,构建文件夹的名称将根据系统而有所不同。另外,如果有人知道弄清楚该临时构建文件夹将被调用的方式,那也可以。
答案 0 :(得分:0)
我解决此问题的方法如下:
def return_major_minor_python():
import sys
return str(sys.version_info[0])+"."+str(sys.version_info[1])
def return_include_dir():
from distutils.util import get_platform
return get_platform()+'-'+return_major_minor_python()
然后在使用以下方法调用config.add_extension()
时
include_dirs=['build/temp.' + return_include_dir()]
因此,将f90wrapped f2py扩展添加到python包的整个过程是:
def setup_fort_ext(args,parent_package='',top_path=''):
from numpy.distutils.misc_util import Configuration
from os.path import join
import sys
config = Configuration('',parent_package,top_path)
fort_src = [join('PackageName/','fortran_source.f90')]
config.add_library('_fortran_source', sources=fort_src,
extra_f90_compile_args = [ args["compile_args"]],
extra_link_args=[args["link_args"]])
sources = [join('PackageName','f90wrap_fortran_source.f90')]
config.add_extension(name='_fortran_source',
sources=sources,
extra_f90_compile_args = [ args["compile_args"]],
extra_link_args=[args["link_args"]],
libraries=['_tort'],
include_dirs=['build/temp.' + return_include_dir()])
return config
if __name__ == '__main__':
import sys
import subprocess
import os
install_numpy() #installs numpy
install_dependencies() #calls to pip to install any requirements
from numpy.distutils.core import setup
config = {'name':'PackageName',
'version':__version__,
'project_description':'Some Package description',
'description':'Some package Description',
'long_description': open('README.txt').read(),
'long_description_content_type':'text/markdown',
'author':'Your name here',
'author_email':'your email here',
'url':'link to git repo here',
'python_requires':'>=3.3',
'packages':['PackageName'],
'package_dir':{'PackageName':'PackageName'},
'package_data':{'PackageName':['*so*']},
'name': 'PackageName'
}
config_fort = setup_fort_ext(args,parent_package='PackageName',top_path='')
config2 = dict(config,**config_fort.todict())
setup(**config2)
其中预先包装了源fortran_source.f90,并将生成的包装后的源文件( f90wrap_fortran_source.f90 )作为库包含在内,然后由f2py进行编译。
上面的args只是您要传递的任何链接或编译args的字典。