【问题标题】:OSError: [Errno 18] Invalid cross-device linkOSError: [Errno 18] 无效的跨设备链接
【发布时间】:2017-07-12 13:37:48
【问题描述】:

我正在使用 django 1.6.5 和 python 2.7。 我的应用中有导入功能,但出现错误:

OSError: [Errno 18] Invalid cross-device link

这部分代码有问题:

os.rename(db_temp, settings.DATABASES['bookmat']['NAME'])

设置中的代码:

'bookmat': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': '/my_projects/book/db/bookmat.sqlite3',
},

【问题讨论】:

  • 什么是 db_temp 值
  • db_temp = settings.DATABASES[db_temp_name]['NAME']@iklinac
  • 初始 db_temp 值作为字符串
  • 当我试图将某些内容从 Docker 容器中的文件夹移动到卷时,我偶然发现了这一点。

标签: python django database settings backend


【解决方案1】:

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

【讨论】:

  • 我的版本如果shutil.move()实际上是用os.rename()实现的。有没有其他替代品可以使用?
  • 我正在使用shutil.move,但仍然出现此错误
  • 正如 Kilian 所说,shutil.move() 使用不同的文件系统会产生与 os.rename() 相同的错误。最容易使用 shutil.copy()os.remove() 代替。
  • shutil.move 在 Python 3 中通过使用复制和删除正确处理外部文件系统,每 documentation
  • @kravietz 在我的情况下它不能正确处理它,至少在带有常规 ext4 和安装有 rclone mount 的文件夹的 python3 上。
【解决方案2】:

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

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 2018-07-16
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多