Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pip安装:递归地在目录中添加文件作为包数据_Python_Flask_Pip_Setuptools - Fatal编程技术网

Python 使用pip安装:递归地在目录中添加文件作为包数据

Python 使用pip安装:递归地在目录中添加文件作为包数据,python,flask,pip,setuptools,Python,Flask,Pip,Setuptools,我正在尝试编写我的setup.py来安装带有pip的Flask应用程序。我有大量非Python文件要作为包数据安装,例如静态资产。我需要递归地包含这些文件,因为有许多嵌套的子目录,例如在下面的示例中的bootstrap/中: myproject ├── MANIFEST.in ├── setup.py └── myproject/ └── app/ ├── __init__.py ├── static/ |   ├── bootstrap/

我正在尝试编写我的
setup.py
来安装带有
pip
的Flask应用程序。我有大量非Python文件要作为包数据安装,例如静态资产。我需要递归地包含这些文件,因为有许多嵌套的子目录,例如在下面的示例中的
bootstrap/
中:

myproject
├── MANIFEST.in
├── setup.py
└── myproject/
    └── app/
        ├── __init__.py
        ├── static/
        |   ├── bootstrap/ (*)
        |   |   └── ...
        |   ├── some.json
        |   └── other.json
        └── templates/
            └── index.html
似乎主要有两种方法可以做到这一点,但我无法找到任何一种方法

方法1:使用
MANIFEST.in
include\u package\u data=True
以及
清单中的以下内容:

recursive-include myproject *.json *.html
然后是来自我的项目根目录的
pip安装。
。此方法根本不安装任何包数据文件。事实上,它似乎忽略了我的
清单。在
中,当我尝试
嫁接时,
排除
等,它们似乎没有效果

方法2:使用带有自定义递归查找函数的
package_data
然后是我的项目根目录中的
pip安装。

此方法根本不安装任何包数据文件。但是,如果不使用递归的
recursive\u get\u package\u data()
中的显式相对路径,而是使用扩展全局的列表,即

setup_info = dict(
    ...
    #include_package_data=False,
    package_data = {'': EXTENSIONS},
    ...
)
它只能安装
.js
.html
文件,我有
\uuuu init\uuuuuuuuuuuupy

我错过了什么?我是否需要同时使用
包含包数据
包数据

更新:通过删除顶级目录,我成功地实现了第二种方法:

    THIS_FILE_DIR = os.path.dirname(os.path.realpath(__file__))
    THIS_FILE_DIR = os.path.join(THIS_FILE_DIR, 'myproject')
并将其作为关键传递给:

    package_data = {'myproject': recursive_get_package_data()},

但是,
清单仍然没有成功。
中的

仅用于sdist。@凯蒂,你能解释一下为什么要这样做吗?你解决了什么问题?@DanilaGanchar我正在用我的模块打包一个烧瓶应用程序。Flask应用程序使用外部
.js
库,这些库的目录布局中可能有大量文件和任意嵌套。手动维护软件包数据文件列表的工作量太大,所以最好递归搜索并包含所有内容。@phd-Oh-crap.:(让我确认一下sdist是否可以使用。@Katie好的。你确定“一瓶”中的前端和后端是一个好方法吗?顺便说一下,你仍然需要nginx、uwsgi、gunicorn之类的东西。
    THIS_FILE_DIR = os.path.dirname(os.path.realpath(__file__))
    THIS_FILE_DIR = os.path.join(THIS_FILE_DIR, 'myproject')
    package_data = {'myproject': recursive_get_package_data()},