为什么我的Python安装脚本失败了?

为什么我的Python安装脚本失败了?,python,python-3.x,distutils,Python,Python 3.x,Distutils,我有一个更复杂的项目,我正在进行,为了将事情简化到其本质,以理解事情失败的原因,我制定了以下项目(屏幕截图来自Eclipse) 这是运行setup.py sdist之前的目录结构 请注意,这里有两个项目—我用于测试分发过程的简单项目(Deploy_Test)和包含我希望在项目间共享的类和函数的通用项目。右边是我的setup.py文件的内容 以下是运行setup.py sdist的输出。请注意红色框显示的结尾处的错误行: 以下是结果。注意创建的空文件夹(红色框再次调用)。在右侧,您可以看到创建的

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

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

以下是运行setup.py sdist的输出。请注意红色框显示的结尾处的错误行:

以下是结果。注意创建的空文件夹(红色框再次调用)。在右侧,您可以看到创建的清单文件的内容:

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

为了测试这一点,我将“类”和“函数”包复制并粘贴到Deploy\u test文件夹中,从setup.py中删除package\u dir参数,删除清单文件和空文件夹,并重新运行setup.py sdist,得到了类似的结果-以前的“common”目录丢失,但是“类”和“函数”目录现在出现在Deploy\u Test-1.0目录中,但是仍然是空的,正如Deploy\u Test-1.0下面的Deploy\u Test子目录一样

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

谢谢你在这方面的建议

在得到@Cartroo的建议后,我在本地硬盘(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 无法找到错误声明的所有文件都存在于部署测试-1.0目录中。公共项目文件夹都已复制到/Deploy_Test文件夹下它们自己的子文件夹中,并且清单文件似乎是正确的(它包括setup.py中指定的包中包含的所有模块)

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

我不确定自己是否已经完全脱离困境,因为dist文件夹包含一个zip文件,其中只有Deploy_Test.py文件。该进程将公共/文件夹复制到Deploy\u Test\文件夹,并在清单文件中包含对原始公共/文件夹(存在于Deploy\u Test文件夹的附属文件夹)内容的引用,但这些模块都没有包含到dist文件夹中,这是我所期望的。然而,考虑到我不知道一个成功的Python发行版是什么样子的,我可能从内存中做出了一个错误的假设,即“不正确的函数”错误是一个Windows特有的错误,它非常普遍,通常表示您正在做系统不支持的事情

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

如果与硬链接相关,则可能相关。如果是这样的话,您可以很容易地尝试—在
setup.py开始时插入此选项,并查看它是否有帮助(甚至在您第一次导入
之前):


当然,这是基于一种预感和一些模糊的记忆,在一段时间前,出于其他原因在Windows上查看该错误。然而,至少插入这两行代码是您可以很容易地尝试的。我也不是说这是一种解决问题的健壮且可移植的方法,但至少它是否会改变您看到的错误,可能会告诉您它是否至少相关。

谢谢-有趣的是,我正在从USB驱动器运行此功能(它可以让我在办公室的台式电脑或家里的笔记本电脑上处理这个问题)。在你提到尝试从USB驱动器运行它之前,我的第一个想法是将结构复制到本地HD(NTFS)看看这是否可以避免问题。我会先尝试一下,然后将您建议的两行代码添加到我的setup.py中,并报告是否有任何一种修复方法可以解决问题。好的,这很有意义-如果您没有重新格式化,USB驱动器通常预格式化为FAT或VFAT,不支持硬链接。一旦您尝试使用NTFS,如果您可以发布你的发现在这里,我可以更新我的答案,使之对任何有这个问题的人来说都是一个更有用的回答。是的-我昨晚刚读完这篇文章就检查了,USB驱动器是FAT32。请参阅我在我的本地HD上尝试这一点的结果。好的-我终于让安装程序无误地运行了。看来我可以做到这一点仅在本地驱动器上。无法在USB驱动器上执行(FAT32)这是我们发现的,但它似乎也无法在映射的网络驱动器上完成,这就是我遇到第二个故障的原因。当我将整个结构移动到本地C:drive时,setup.py sdist运行正常。因此,听起来问题仍然可能是硬链接-我不能100%确定Windows是否支持网络驱动器上的硬链接ut意味着
import os
del os.link