首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >脚本在同事设备上运行得很好,但给了我“无效的跨设备链接”。

脚本在同事设备上运行得很好,但给了我“无效的跨设备链接”。
EN

Stack Overflow用户
提问于 2020-11-11 21:39:12
回答 1查看 746关注 0票数 0

我的脚本在同事设备(MacOSX与Desktop与我一样)上运行得很好,但是每次都给我相同的错误和它不移动的,或者只有一半是目录中的库。

代码语言:javascript
复制
OSError: [Errno 18] Invalid cross-device link: '/tmp/pip-target-dzwe_2kc/lib/python/numpy' ->
 '/foo/python/numpy'

我的剧本:

代码语言:javascript
复制
#!/bin/bash
export PKG_DIR='python'
export SIDE_DEPS_DIR='deps'

rm -rf ${PKG_DIR} && mkdir -p ${PKG_DIR}
rm -rf ${SIDE_DEPS_DIR} && mkdir -p ${SIDE_DEPS_DIR}

docker run --rm -v $(pwd):/foo -w /foo lambci/lambda:build-python3.8 \
    pip3 install -r requirements.txt -t ${PKG_DIR}

# move stuff to deps
find /${PKG_DIR} -maxdepth 1 -type d \
\( -name "pandas*" -o -name "numpy*" -o -name "numpy.libs*" -o -name "scipy*" -o -name "scipy.libs*" \) -exec mv '{}' ${SIDE_DEPS_DIR} \;

# zip side dependencies
zip -r ge_deps.zip deps
# zip layer
zip -r layers-python38-great-expectations.zip python

它是一个脚本,它使用一个公共lambda映像来创建lambda层(基本上是一个包含库的zip ),并移除不必要的库,将它们放在另一个文件夹deps中。

上面的代码将使用公共Docker映像lambci / lambda,并将安装在空的python目录中,这些库来自一个称为“远大期望”的python包,它有助于测试数据管道( requirements.txt中指定,是great-expectations==0.12.7)。

我已经被这个问题困了一段时间了,还没有找到解决办法。

EN

回答 1

Stack Overflow用户

发布于 2021-01-11 15:14:18

刚刚出了这个问题。

/tmp和/foo是不同的设备-- /tmp在坞操作系统中,/foo映射到本地操作系统。

pip似乎正在使用shutil.rename()将构建的包从tmp移动到最终的输出位置(/foo)。这是失败的,因为它们是不同的设备。理想情况下,pip将使用shutil.move()代替,这将处理跨设备移动。

作为解决办法,您可以在调用PIP命令之前通过设置TMPDIR来更改pip使用的临时文件夹。即在码头映像中调用pip之前的export TMPDIR=/foo/tmp。所以,整个命令可能类似于

代码语言:javascript
复制
docker run --rm -v $(pwd):/foo -w /foo lambci/lambda:build-python3.8 \
    /bin/bash -c "export TMPDIR=/foo/tmp && pip3 install -r requirements.txt -t ${PKG_DIR}"

(从https://www.edureka.co/community/10736/how-to-run-multiple-commands-in-docker-at-once获取的多个命令soln --开放给更好的建议!)

这可能会慢一些,因为它使用本地操作系统处理临时文件,但它避免了从临时文件夹到最终输出文件夹的设备之间的“重命名”尝试。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64794517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档