我正在处理一个更复杂的项目,为了将事情简化为本质以了解失败的原因,我制作了以下项目(屏幕截图来自 Eclipse)
这是运行setup.py sdist 之前的目录结构 注意这里有两个项目 - 我用于测试分发过程的简单项目 (Deploy_Test),以及包含我希望共享的类和函数包的公共项目跨项目。右边是我的 setup.py 文件的内容
这是运行setup.py sdist的输出。注意最后由红框标出的错误行:
这是结果。注意创建的空文件夹(再次由红色框标出)。在右侧,您可以看到创建的 MANIFEST 文件的内容:
我最初的想法是,尽管我通过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 发行版是什么样的,我可能做出了不正确的假设