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()},