我试图通过spot\u fleet\u请求方法的user\u data参数运行bash脚本。脚本执行所有安装并连接到文件系统,但是当它运行我需要运行的python文件时,它会给我以下错误:
Traceback (most recent call last):
File "/home/ec2-user/efs/dir/create_lvl_output.py", line 8, in <module>
from modeling import generators
ImportError: No module named modeling
其中modeling
是一个文件夹,其中包含我正在导入的脚本“modeling/generators.py”。
我已尝试按照this post中的建议将目录分配给PYTHONPATH环境变量,以下是我的代码:
#!/bin/bash
export PYTHONPATH=/home/ec2-user/efs/Day-Trader/day_trader/
echo $PYTHONPATH
...mount efs
...installs
python /home/ec2-user/efs/dir/create_lvl_output.py > levelset.txt
但它继续以同样的错误失败。我尝试了以下每个变体的解决方案,但它们都未能解决导入问题
echo "export PYTHONPATH=/home/ec2-user/efs/dir/" >> ~/.bashrc
. ~/.bashrc #--- failed to import, set PYTHONPATH variable correctly
echo "export PYTHONPATH=/home/ec2-user/efs/dir/" >> /home/ec2-user/.bashrc
. /home/ec2-user/.bashrc #--- failed to import, set PYTHONPATH variable correctly but got following error as well: /home/ec2-user/.bashrc: line 2: /root/.dlamirc: No such file or directory
我还确保脚本确实有效。如果我在登录ec2用户(即$HOME=/HOME/ec2 user/)时直接将脚本复制并粘贴到linux终端,并且运行良好并生成所有正确的输出。因此,我认为如果我按照this post中的建议更改bash脚本顶部的用户,它可能会工作,但以下命令仍然以root用户身份运行后面的所有命令:
su -l "ec2-user"
,su - ec2-user
我试着使用
su ec2-user -c 'python /home/ec2-user/efs/dir/create_lvl_output.py'
但它也不起作用。我没有主意了。请帮忙
我认为推荐的方法当然是尝试将代码打包为适当的模块,并在使用pip之前安装它,无论是在用户/系统级别还是在pythonenv风格的环境中。当然,这可能是非常困难和耗时的,这取决于您必须修改多少代码来适应这一点,建议您在项目开始时尝试这样做,以避免这一头痛问题
除了做那个些不寻常的工作之外,我实际上遇到了你们在Amazon的EC2 LTS ubuntu上遇到的这个特定错误。不知道是什么原因造成的,但它就像python一样,只是绕过了正常的环境设置,并没有像您所期望的那样工作。在我的情况下,我只是做了一些肮脏的修正:
因此,对于您的用例,请尝试:
当然,你可以用这个做一些非常讨厌的事情,比如:
如果出于某种原因,你不喜欢每一个不喜欢与此合作的人。撇开玩笑不谈,我真的在生产中使用过类似的东西,如果你能弄清楚到底是什么导致了这些环境问题,我很想知道,即使我不再在有这些问题的机器上工作
相关问题 更多 >
编程相关推荐