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

时间:2013-06-20 20:20:23

标签: python python-3.x distutils

我正在进行一个更复杂的项目,并试图简化事情以了解事情失败的原因,我编写了以下项目(屏幕截图来自Eclipse)

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

以下是运行 setup.py sdist 的输出。注意红色框调出的最后的错误行: Output from running **setup.py sdist**

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

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

为了测试这个,我将“classes”和“functions”包复制并粘贴到 Deploy_Test 文件夹中,从setup.py中删除了 package_dir 参数,删除了MANIFEST文件和空文件夹,并重新运行 setup.py sdist ,并得到类似的结果 - 以前的“常见”目录丢失,但“类”和“函数”目录现在出现在 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中指定的软件包中包含的所有模块)< / p>

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

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

1 个答案:

答案 0 :(得分:1)

内存“错误的功能”错误是一个特定于Windows的错误,它非常通用,通常表示你正在做一些系统不支持的事情。

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

如果它与硬链接有关,那么this bug可能是相关的。如果是这样,那么您可以轻松尝试 - 在setup.py的开头插入正确,看看它是否有帮助(甚至在您的第一个import之前):

import os
del os.link

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