OSError:[Errno 18]无效的跨设备链接

mar*_*ark 30 python database django settings backend

我正在使用django 1.6.5和python 2.7.我的应用程序中有导入功能,我收到错误:

OSError: [Errno 18] Invalid cross-device link
Run Code Online (Sandbox Code Playgroud)

我对这部分代码有问题:

os.rename(db_temp, settings.DATABASES['bookmat']['NAME'])
Run Code Online (Sandbox Code Playgroud)

设置中的代码:

'bookmat': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': '/my_projects/book/db/bookmat.sqlite3',
},
Run Code Online (Sandbox Code Playgroud)

小智 52

os.rename仅当源和目标位于同一文件系统上时才有效.你应该使用shutil.move.

  • @kravietz 在我的情况下它不能正确处理它,至少在带有常规 ext4 的 python3 和一个安装有 `rclone mount` 的文件夹上。 (6认同)
  • 根据[文档](https://docs.python.org/3/library/shutil.html#shutil.move),Python 3中的`shutil.move`通过使用复制和删除来正确处理外部文件系统。 (4认同)
  • 我正在使用 `shutil.move` 并且仍然收到此错误 (3认同)
  • 我的版本如果shutil.move()实际上是根据os.rename()实现的.还有另一种选择吗? (2认同)
  • 正如Kilian所说,具有不同文件系统的`shutil.move()`与`os.rename()`产生相同的错误。最容易使用`shutil.copy()`和`os.remove()`。 (2认同)

Tia*_*ida 7

我认为重命名仅在源名称和目标名称位于同一文件系统上时才有效。你可能有不同的坐骑。否则你会得到那个错误。您可以通过复制和删除来实现相同的效果。

希望能帮助到你