无法复制'ANIFEST.in':不存在或不存在常规文件

时间:2014-12-10 19:08:26

标签: pip setuptools distutils

注意: 截至2015年9月4日,我无法再使用python 2或python 2中的当前版本的python和setuptools / distutils重现此问题3。


注意:我自己已经回答了这个问题,一旦系统允许我就会接受答案,但这似乎是英语参考的唯一实例对于互联网上的问题(根据谷歌),所以我认为我发布这两个希望这可能有用。


我遇到了一个问题,我发现在安装我自己的python包时无法调试。它是一个非常简单的包,具有扁平结构(没有子目录),以及我需要在安装时复制的一些数据文件。为简洁起见,我有一些删除:

spherical_functions
├── MANIFEST.in
├── __init__.py
├── spherical_functions.py
├── ladder_operator_coefficients.npy
└── setup.py

从我的源目录安装时,我没有问题。但是,当我切换到setuptools或安装pip(分发时需要)时,我收到错误

can't copy 'ANIFEST.in': doesn't exist or not a regular file

请注意该文件名开头缺少M。我有点入侵distutils以验证它实际上是在尝试复制ANIFEST.in,而不是仅仅误报名称。不幸的是,这条路径终止了,因为其他的setuptools代码隐藏在一些我不理解的蛋中。

在没有MANIFEST.in文件的情况下出现类似的问题,仅使用package_data函数的setup选项,它错过了数据文件的第一个字母,如

error: can't copy 'adder_operator_coefficients.npy': doesn't exist or not a regular file

2 个答案:

答案 0 :(得分:3)

this thread得到提示,我意识到我犯了错误;我并没有真正理解setupsetup.py函数的所有选项。我有

package_dir={'spherical_functions': ''},

我什么时候应该

package_dir={'spherical_functions': '.'},

(注意额外的点。)包括这个后,似乎工作得很好。

我可能会建议在任何情况下产生的行为都是错误的,这表明setuptools和/或distutils中存在错误。或者至少可以检查以确保用户没有像我那样做一些愚蠢的事情......

答案 1 :(得分:0)

请注意,您可以使用py_modules关键字setup(),如果您愿意,它应该只是要安装的模块(文件)名称列表。这是最简单的python发行版。

setup(...
      py_modules=['spherical_functions'],
      ...)

通过这种方式,在安装您的发行版之后,可以只运行from spherical_functions import <a_member_inside_that_file>