问题描述
我正在尝试创建python源程序包,但是在为文件创建硬链接时失败。
$ python setup.py sdist
running sdist
running check
reading manifest template 'MANIFEST.in'
writing manifest file 'MANIFEST'
making hard links in foo-0.1...
hard linking README.txt -> foo-0.1
error: Operation not permitted
我尝试使用sudo运行命令,但是会产生相同的错误。
这也会产生相同的错误:
ln foo bar
我正在使用vbox运行ubuntu的虚拟实例,这可能是问题所在。创建源发行版时,有没有使用硬链接的方法?
系统信息:
Ubuntu服务器11.04; VirtualBox 4.14; osx 10.6.6; python 2.7.1;
最佳方法
从您的问题尚不清楚什么步骤失败了。可能是错误发生之前的硬链接。您可以尝试使用strace查看哪些系统调用失败。至少应该可以更好地了解问题。
This python bug report似乎直到distutils2都不会解决此问题。有人确实提供了可能对您有用的补丁。您也许还可以通过NFS挂载目录并在那里建立目录。我相信NFS允许硬链接。
次佳方法
同样的问题。我正在使用流浪汉,我的主机操作系统是Windows,而Gust操作系统是Ubuntu。我不是vim爱好者,所以@simo的答案对我没有多大帮助,因为我确实依赖虚拟盒共享文件夹将Sublime编辑器所做的更改同步到Ubuntu虚拟机。
感谢Fabian Kochem,他找到了一种快速而肮脏的解决方法:post
# if you are not using vagrant, just delete os.link directly,
# The hard link only saves a little disk space, so you should not care
if os.environ.get('USER','') == 'vagrant':
del os.link
第三种方法
我遇到了同样的问题。通过将python源从虚拟框共享文件夹移动到我的debian主文件夹中,我能够使其工作。 sdist上没有错误了。
希望对您有所帮助。
第四种方法
看起来这在Python版本2.7.9中已修复-https://hg.python.org/cpython/raw-file/v2.7.9/Misc/NEWS
Issue #8876: distutils now falls back to copying files when hard linking
doesn't work. This allows use with special filesystems such as VirtualBox
shared folders