include_dir的distutils通配符条目

时间:2018-08-01 07:42:50

标签: python wildcard packaging distutils

我正在使用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]

我想要这个的原因是,构建文件夹的名称将根据系统而有所不同。另外,如果有人知道弄清楚该临时构建文件夹将被调用的方式,那也可以。

1 个答案:

答案 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的字典。