如何将其他文件包含到包中?

How to include additional files into a package?

如何将未写入 python 的文件包含到包装中? 或者使它更具体: 假设我有如下的包结构,如何包含templates目录的所有文件?

- projectname
  - __init__.py
  - classfile.py
  - templates
    - file1.prototxt
    - file2.caffemodel

我有以下setup.py

from distutils.core import setup
setup(
  name = 'projectname',    
  packages = ['projectname'], 
  version = '0.1',      
  license='MIT',        
  description = 'my description',  
  author = 'FULL NAME',                
  author_email = 'example@gmail.com',     
  url = 'https://github.com/repo',   
  download_url = 'https://github.com/repo/.../v_01.tar.gz',
  keywords = ['keywords'],  
  install_requires=[      
          'opencv-python',
          'numpy'
      ],
  classifiers=[
    'Development Status :: 3 - Alpha',      
    'Intended Audience :: Developers',      
    'Topic :: Software Development :: Build Tools',
    'License :: OSI Approved :: MIT License',  
    'Programming Language :: Python :: 3',     
  ],
)

当我在 Whosebug 上的某处阅读时,我尝试将以下内容添加到 setup.py 文件中,但没有任何区别。

package_data = {
      'templates': ['*'],
  }

可能与此

重复
include_package_data=True

序言。 “包”这个词用得太重了。我将使用 "importable package" 这个词的意思,即带有 __init__.py.

的目录

我发现您的代码有两个问题。首先,您使用 distutils 这是一个过时的过时包。它将从 Python 中删除。你早就应该切换到 setuptools 了。所以替换行

from distutils.core import setup

from setuptools import setup

第二题在

package_data = {
    'templates': ['*'],
}

字典中的键是,而不是目录名。您的 templates 不是一个包(不是 __init__.py)而是一个数据目录。所以包含它的方式是

package_data = {
    'projectname': ['templates/*'],
}