setup.py的不安装数据文件(setup.py not installing data file

2019-07-30 04:01发布

我有一个Python库,除了常规的Python模块,有需要/usr/local/lib/python2.7/dist-package/mylibrary去一些数据文件。

不幸的是,我一直无法说服setup.py实际上有安装数据文件。 请注意,这种行为是在安装 - 没有sdist。

下面是setup.py的略微删节版

module_list = list_of_files

setup(name         ='Modules',
      version      ='1.33.7',
      description  ='My Sweet Module',
      author       ='PN',
      author_email ='email',
      url          ='url',
      packages     = ['my_module'],

# I tried this. It got installed in /usr/my_module. Not ok.

      # data_files   = [ ("my_module",  ["my_module/data1",
      #                                  "my_module/data2"])]

# This doesn't install it at all.
      package_data = {"my_module" : ["my_module/data1",
                                     "my_module/data2"] }
     )

这是在Python 2.7(将要在2.6最终运行),并且将有10.04和12+之间的一些Ubuntu的运行。 现在正在开发它在12.04。

Answer 1:

http://docs.python.org/distutils/setupscript.html#installing-additional-files

如果目录的相对路径 ,它是相对于安装的前缀(纯Python包,sys.exec_prefix对于包含扩展模块封装Python的sys.prefix)解释。

这可能会做到这一点:

data_files   = [ ("my_module",  ["local/lib/python2.7/dist-package/my_module/data1",
                                 "local/lib/python2.7/dist-package/my_module/data2"])]

或者只是使用联接添加前缀:

data_dir = os.path.join(sys.prefix, "local/lib/python2.7/dist-package/my_module")
data_files   = [ ("my_module",  [os.path.join(data_dir, "data1"),
                                 os.path.join(data_dir, "data2")])]


Answer 2:

UPD: package_data格式接受字典{'package': ['list', 'of?', 'globs*']}因此使其工作,应指定相对壳水珠打包目录,而不是相对的文件路径到分配根。

data_files具有不同的含义,而且,在一般情况下,应避免使用此参数。

随着setuptools的,你只需要include_package_data=True ,但数据文件应该是在版本控制系统,知道setuptools的(默认情况下它只能识别CVS和SVN,安装setuptools-gitsetuptools-hg ,如果你使用git或HG ...)


与setuptools的,您可以:

-在MANIFEST.im:

    include my_module/data*

- 在setup.py:

    setup(
        ...
        include_package_data = True,
        ...
    )


文章来源: setup.py not installing data files