linux离线移植python环境,启动报错(ModuleNotFoundError: No module named ‘encodings‘;<no Python frame>)
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encodingPython runtime state: core initializedModuleNotFoundError: No module named 'encodings'Current thread 0x00
一、背景
因为项目原因,需要在linux安装python环境做开发。但是客户机器不能联网,考虑离线安装,在离线安装过程也是出现了一些错误,于是就有了这篇文章(多么希望没有)。
离线移植python环境到服务器(我这里是直接拷贝anaconda3文件夹移植)
二、移植步骤
1)将anaconda3放到root目录后,配置如下环境变量:
echo 'export PATH="~/anaconda3/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
2)然后查看conda版本,显示如下:
conda 4.10.1
3)接着查看python版本,如下:
python 3.8.8
4)到这里我天真的以为已经ok了,让我万万没想到的是在python xxx.py的时候报错了,就是标题的那个错误。完整的报错信息我贴到下面:
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Python path configuration:
PYTHONHOME = (no set)
PYTHONPATH = (no set)
program name = 'python'
isolated = 0
environment = 1
user site = 1
import site = 1
sys._base_executable = '/usr/bin/python'
sys.base_prefix = '/tmp/'
sys.base_exec_prefix = ''/tmp/'
sys.executable = ''/tmp/'
sys.prefix = ''/tmp/'
sys.exec_prefix = ''/tmp/'
sys.path = [
''/tmp/',
''/tmp/',
]
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'
Current thread 0x00007fab36715740 (most recent call first):
<no Python frame>
三、解决方法
于是我就上网搜,大多的解决方法都是修改环境变量以及下载那个encodings的包,不过因为网络也没有尝试这种方法。
不过呢,解决方法还是从环境变量入手。查看其他机器上的环境变量配置后,我就把正常的机器的环境变量拷到出错的机器上。可真是不试不知道,一试吓一跳。再次运行python xxx.py后就没有之前的报错了。环境变量配置如下:(把内容复制到~/.bashrc即可。)
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/root/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [-f "/root/anaconda3/etc/profile.d/conda.sh" ]; then
. "/root/anacnda3/etc/profile.d/conda.sh"
else
export PATH="/root/anaconda3/bin:$PATH"
fin
fin
unset __conda_setup
# <<< conda initialize <<<
ps:看不懂shell,有没有大佬来解释下这段配置起到了啥作用???
四、总结
总之在离线移植或者安装,是有很多注意事项的。尤其是像我这种直接拷贝文件夹移植的。可能你移植的包里有些文件配置是指向原机器特定目录,在移植过去就会出现各种问题。总之多注意、多总结。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)