Pip安装忽略MANIFEST.in中的文件 - 如何正确结构化项目?
我看了很多关于这个问题的资料,但还是找不到解决办法,所以我决定再问一次,因为我甚至不确定我的Python包的文件夹结构是否正确。
简单来说,我正在开发一个应用程序,它使用Tornado这个网络服务器框架,我想把它打包,这样用户就可以通过pip
安装,并且可以使用一个基本的脚本来启动网络服务器。
我的文件夹结构如下:
├── MANIFEST.in
├── README.md
├── config
│ └── default.cfg
├── docs
│ ├── Makefile
│ ├── _build
│ ├── _static
│ ├── _templates
│ ├── conf.py
│ ├── index.rst
├── foopackage
│ ├── __init__.py
│ ├── barmodule.py
│ └── bazmodule.py
├── setup.py
├── static
│ ├── css
│ │ ├── menu.css
│ │ └── main.css
│ ├── img
│ │ └── logo.png
│ ├── js
│ │ ├── ui.js
│ │ └── navigation.js
│ └── lib
│ ├── d3.v3.min.js
│ └── jquery-1.11.0.min.js
└── templates
├── index.html
└── whatever.html
Python代码在foopackage
这个包里。
MANIFEST.in
文件会递归地包含config
、static
、templates
和docs
这些文件夹。
这是我的setup.py
文件(只包含相关部分):
from setuptools import setup
setup(name='foo',
version='0.1.0',
packages=['foopackage'],
include_package_data=True,
install_requires=[
'tornado>=3.2.2',
],
entry_points={
'console_scripts': [
'foo=foopackage.barmodule:main',
],
},
)
如果我运行python setup.py sdist
,所有东西都会被很好地打包,包括docs
、templates
和config
文件等。但是,如果我运行pip install ...
,只有foopackage
会被安装,其他的都被忽略了。
我该如何将这些额外的文件包含到安装过程中?我的文件夹结构可以吗?我还听说过“伪造一个包”,就是把所有东西放在一个文件夹里,然后加一个__init__.py
文件,但这对我来说似乎有点奇怪 :-\
1 个回答
2
我通过把 static
文件夹移动到实际的 Python 模块目录(foopackage
)来解决这个问题。看起来,如果不把文件夹放在包里面,最上层的“非包”文件夹会被忽略。