【问题标题】:How to include sql files from a folder to setuptools while packaging as python egg打包为python egg时如何将文件夹中的sql文件包含到setuptools
【发布时间】:2021-01-15 21:44:03
【问题描述】:

我的目录结构如下。

.
├── package
    ├── app
    │   ├── __init__.py
    │   ├── file1.py
    │   └── file2.py
    ├── master_sql_folder
    │   │
    │   │──sql_folder_1
    │   │      ├── world.sql
    │   │      ├── earth.sql
    │   │
    │   └──sql_folder_2
    │          ├── planet.sql
    │          ├── sun.sql
    │         
    └── wrapper_scripts
    │    ├── wrapper.py
    │    └── __init__.py
    ├── setup.py

我试图将 master_sql_folder(world.sql、earth.sql、planet.sql、sun.sql)的子文件夹中存在的所有 sql 文件包含到 setuptools 中,同时打包为 egg,我无法在其中使用 sql_folder_1 和 sql_folder_2将来可以在 master_sql_folder 下添加新文件夹的路径,我也需要代码来读取它们。我尝试将以下几行添加到我的 setup.py 中,但它不包括构建中的 sql 文件。

package_data={'master_sql_folder':['*']}
packages=['app', 'wrapper_scripts']

提前感谢您的帮助。

【问题讨论】:

  • this question 的可能重复项。
  • 提到的链接确实帮助我使用这个 data_files=[('master_sql_folder/sql_folder_1', ['master_sql_folder/sql_folder_1/world.sql'])] 并且这个工作但我不能在路径,有没有一种方法可以从所有子文件夹中选择文件,例如 data_files=[('master_sql_folder', ['master_sql_folder/*/*.sql'])]。它导致错误:无法复制'master_sql_folder**.sql':不存在或不是常规文件
  • 如果我没记错的话,每个文件都必须单独命名。或者,编写一个函数来收集文件并为您构建文件列表。
  • 感谢@S3DEV 的宝贵建议。

标签: python


【解决方案1】:

基于@S3DEV 的建议和接受的答案How to add package data recursively in Python setup.py?。我能够得到解决方案。

#sql_file_picker.py -- 将文件提供给 setup.py 的脚本

import glob
class FilePicker:
    def __init__(self):
        pass
    def sql_file_picker(self):
        sql_files = []
        directories = glob.glob('master_sql_folder\\**\\')
        for directory in directories:
            files = glob.glob(directory + '*.sql')
            if len(files) != 0:
                sql_files.append((directory, files))
        return sql_files

在 setup.py 中

from wrapper_scripts.sql_file_picker import FilePicker
from setuptools import setup
setup(
    name='XXXXXXXXX',
    version='X.X.X',
    packages=['app', 'wrapper_scripts'],
    url='',
    license='',
    author='',
    author_email='',
    description='XXXXXXXXXXXXX',
    data_files=FilePicker().sql_file_picker()
)

【讨论】:

    猜你喜欢
    • 2012-08-04
    • 2014-03-06
    • 1970-01-01
    • 2015-07-21
    • 2020-08-20
    • 2013-08-20
    • 2014-01-14
    相关资源
    最近更新 更多