我试图设置一个python包进行分发。我之前没有这样做过,所以我对最佳实践,甚至如何让事情有效,我都很朦胧,而且我遇到了问题。我的项目结构如下所示:
ROIWidgets/
MANIFEST.in
setup.py
setup.cfg
ROIWidgets/
__init__.py
static/
widgets/
js -> <symlink to folder containing JavaScript files>
问题在于静态的JS文件。我从distutils
开始。我在MANIFEST.in
中包含了这一行:
recursive-include static *
...这导致JS被包含在包中。尼斯。然后我读到如果我希望我的安装脚本自动安装依赖项,我需要使用setuptools
而不是distutils
。所以,我切换了:我从setup
而不是setuptools
导入distutils
。但现在,当我说setup.py sdist
时,这一行出现在输出中:
warning: no files found matching '*' under directory 'static'
...并且JS文件不包含在发行版中。在与调试器进行了长时间的会话之后,我将问题放在setuptools/__init__.py
中。这是:
def findall(dir = os.curdir):
"""Find all files under 'dir' and return the list of full filenames
(relative to 'dir').
"""
all_files = []
for base, dirs, files in os.walk(dir):
if base==os.curdir or base.startswith(os.curdir+os.sep):
base = base[2:]
if base:
files = [os.path.join(base, f) for f in files]
all_files.extend(filter(os.path.isfile, files))
return all_files
distutils.filelist.findall = findall # fix findall bug in distutils.
os.walk
默认不遵循符号链接。因此setuptools
findall
版js
版本不在我的distutils
目录中。 findall
os.walk
没有使用distutils
- 而是拥有自己的目录行走代码。从更改日志中可以看出,findall
os.walk(dir, followlinks=True)
在符号链接损坏方面存在问题,此替换符号旨在解决此问题。使用distutils
本来很容易,但也许有一些理由说明这是个坏主意?
所以我有点卡住了。要么我改变了我的项目结构,我不喜欢这样做,要么我用setuptools
和{{1}}内部结构,这种前景让我更加不快乐。
有什么建议吗?
答案 0 :(得分:0)