Python distutils错误:“ [目录] ...不存在或不是常规文件” [英] Python distutils error: "[directory]... doesn't exist or not a regular file"
问题描述
让我们采用以下项目布局:
Let's take the following project layout:
$ ls -R .
.:
package setup.py
./package:
__init__.py dir file.dat module.py
./package/dir:
tool1.dat tool2.dat
以下内容为 setup.py
:
$ cat setup.py
from distutils.core import setup
setup(name='pyproj',
version='0.1',
packages=[
'package',
],
package_data={
'package': [
'*',
'dir/*',
],
},
)
如您所见,我想包括所有非- package /
和 package / dir /
目录中的Python文件。但是,运行 setup.py install
会引发以下错误:
As you can see, I want to include all non-Python files in package/
and package/dir/
directories. However, running setup.py install
would raise the following error:
$ python setup.py install
running install
running build
running build_py
creating build
creating build/lib
creating build/lib/package
copying package/module.py -> build/lib/package
copying package/__init__.py -> build/lib/package
error: can't copy 'package/dir': doesn't exist or not a regular file
有什么用?
推荐答案
在您的 package_data $ c中$ c>,您的
'*'
全局名称将匹配 package / dir
本身,并尝试将该目录复制为文件,导致失败。找到与目录 package / dir
不匹配的全局名称,按照以下几行重写您的 setup.py
:
In your package_data
, your '*'
glob will match package/dir
itself, and try to copy that dir as a file, resulting in a failure. Find a glob that won't match the directory package/dir
, rewriting your setup.py
along these lines:
from distutils.core import setup
setup(name='pyproj',
version='0.1',
packages=[
'package',
],
package_data={
'package': [
'*.dat',
'dir/*'
],
},
)
以您的示例为例,这只是将'*'
更改为'*。dat'
,尽管您可能需要进一步优化glob,但只需确保它与'dir'
Given your example, that's just changing '*'
to '*.dat'
, although you'd probably need to refine your glob more than that, just ensure it won't match 'dir'
这篇关于Python distutils错误:“ [目录] ...不存在或不是常规文件”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!