2

我正在处理一个更复杂的项目,为了将事情简化为本质以了解失败的原因,我制作了以下项目(屏幕截图来自 Eclipse)

这是运行setup.py sdist 运行前的目录结构 **setup sdist**之前的目录结构 注意这里有两个项目 - 我用于测试分发过程的简单项目 (Deploy_Test),以及包含我希望共享的函数包的公共项目跨项目。右边是我的 setup.py 文件的内容

这是运行setup.py sdist的输出。注意最后由红框标出的错误行: 运行 **setup.py sdist** 的输出

这是结果。注意创建的空文件夹(再次由红色框标出)。在右侧,您可以看到创建的 MANIFEST 文件的内容: 运行 **setup.py sdist** 的结果

我最初的想法是,尽管我通过package_dir参数在 setup.py 中引用了引用的“类”和“函数”包,但这在某种程度上导致了问题。

为了测试这一点,我将“类”和“函数”包复制并粘贴到Deploy_Test文件夹中,从 setup.py 中删除package_dir参数,删除 MANIFEST 文件和空文件夹,然后重新运行setup.py sdist,得到类似的结果 - 以前的“common”目录丢失了,但“classes”和“functions”目录现在出现在Deploy_Test-1.0目录中,但仍然是空的,就像Deploy_Test-1.0下的Deploy_Test子目录一样。

我仍然收到相同的错误“功能不正确”错误消息。我仍然不明白它想告诉我什么。

感谢您对此的任何建议...

在获得@Cartroo 对此的建议后,我在本地 HD (NTFS) 上使用相同的结构重新运行了该过程。确实避免了“不正确的功能”错误,但现在有别的东西把事情搞砸了。这是setup.py sdist的输出

running sdist
running check
writing manifest file 'MANIFEST'
creating Deployment Test-1.0
creating Common
creating Common\classes
creating Common\functions
creating Deployment Test-1.0\Deploy_Test
making hard links in Deployment Test-1.0...
hard linking setup.py -> Deployment Test-1.0
hard linking ..\Common\classes\__init__.py -> Deployment Test-1.0\..\Common\classes
hard linking ..\Common\classes\fw_ftp.py -> Deployment Test-1.0\..\Common\classes
hard linking ..\Common\functions\__init__.py -> Deployment Test-1.0\..\Common\functions
hard linking ..\Common\functions\fw_date.py -> Deployment Test-1.0\..\Common\functions
hard linking ..\Common\functions\fw_db.py -> Deployment Test-1.0\..\Common\functions
hard linking ..\Common\functions\fw_file.py -> Deployment Test-1.0\..\Common\functions
hard linking ..\Common\functions\fw_file_io.py -> Deployment Test-1.0\..\Common\functions
hard linking ..\Common\functions\fw_string.py -> Deployment Test-1.0\..\Common\functions
hard linking Deploy_Test\Deploy_Test.py -> Deployment Test-1.0\Deploy_Test
hard linking Deploy_Test\__init__.py -> Deployment Test-1.0\Deploy_Test
creating dist
creating 'dist\Deployment Test-1.0.zip' and adding 'Deployment Test-1.0' to it
adding 'Deployment Test-1.0\PKG-INFO'
removing 'Deployment Test-1.0' (and everything under it)
error removing Deployment Test-1.0: Deployment Test-1.0\Deploy_Test\Deploy_Test.py: The system cannot find the file specified
error removing Deployment Test-1.0: Deployment Test-1.0\Deploy_Test\__init__.py: The system cannot find the file specified
error removing Deployment Test-1.0: Deployment Test-1.0\Deploy_Test: The directory is not empty
error removing Deployment Test-1.0: Deployment Test-1.0\setup.py: The system cannot find the file specified
error removing Deployment Test-1.0: Deployment Test-1.0: The directory is not empty

dist/Deployment Test-1.0.zip中包含的唯一内容是一个文件: PKG-INFO 所有错误声称找不到的文件都存在于Deployment Test-1.0 目录中。Common项目文件夹都被复制到 /Deploy_Test 文件夹下的它们自己的子文件夹中,并且 MANIFEST 文件似乎是正确的(它包括 setup.py 中指定的包中包含的所有模块)

哈!有趣的!返回到 USB 驱动器并将这两行添加到 @Cartroo 建议的 setup.py 后,我没有收到任何错误 - 甚至没有我在本地 HD 上遇到的关于找不到文件的错误。

我不确定我是否已经完全走出困境,因为 dist 文件夹包含一个 zip 文件,其中只有 Deploy_Test.py 文件。该过程将 Common/ 文件夹复制到 Deploy_Test\ 文件夹,并在清单文件中包含了对原始 Common/ 文件夹(与 Deploy_Test 文件夹的附属物)内容的引用,但这些模块都没有包含在 dist 中文件夹,这是我所期待的。但是,考虑到我不知道成功的 Python 发行版是什么样的,我可能做出了不正确的假设

4

1 回答 1

1

根据记忆,“不正确的功能”错误是 Windows 特定的错误,它非常通用,通常表明您正在执行系统不支持的操作。

我注意到错误之前的消息是关于硬链接的——我想知道这是否只适用于某些文件系统。我建议检查您是否使用 NTFS - 如果没有,也许看看是否可以创建一个小的 NTFS 分区来尝试构建(可能在 USB 驱动器上)。

如果它与硬链接有关,那么这个错误可能是相关的。如果是这样,那会给您一个简单的尝试 - 在您的开头插入它看看setup.py它是否有帮助(甚至在您的第一个之前import):

import os
del os.link

当然,这是基于前一段时间在 Windows 上出于其他原因调查该错误的预感和一些模糊的记忆。但是,至少插入这两行是您可以很容易尝试的。我也不建议这是解决问题的一种强大且可移植的方法,但至少它是否会改变您看到的错误可能会为您提供有关它是否至少相关的信息。

于 2013-06-20T23:01:53.270 回答