path的锅?

Linux中环境变量PATH,CMAKE_PREFIX_PATH,LIBRARY_PATH与LD_LIBRARY_PATH区别,以及顺序 /lib是内核级的:包含被 /bin/ 和 /sbin/ 中的程序使用的库文件; /usr/lib是系统级的:目录 /usr/lib/ 中含有更多用于用户程序的库文件; /usr/local/lib是用户级的:用户如果放入.so库编译和运行时都要指定动态链接库的路径。 如下方式: (目前感觉大家写进配置文件的形式都很随意,不知道哪个是标准形式) export LD_LIBRARY_PA... 阅读详情

用Python进行国际化编码的兄弟对这个错误大抵应该是不陌生的——“UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)”。根据业内“公认”的鄙视链,恭喜老铁们,大家应该都稳稳的占据了第三顺位……不过窃以为这张插图还未画完 ,悬揣接下来的应该是遇到了UnicodeEncodeError依然好似无头苍蝇般执拗的误打误撞吧 ( ̄▽ ̄)ノ 哈哈,skr~~~而止,让我们言归正传。

https://i-blog.csdnimg.cn/blog_migrate/e783374ce6e89165c432ebbfcef03e94.jpeg

笔者于近期遇到了这样一个bug,曰:一旦datastore name包含了非英文字符,生成support bundle的过程就会失败并报错。ErrorLog中我们再次重逢了这张熟悉的面孔——UnicodeEncodeError: 'ascii' codec can't encode characters in position 22-23: ordinal not in range(128) 都提示到这份儿上了,还有什么可犹豫的,直接……“等等,我明白了,一定是文件链接导致了path没拿对,不能用abspath获取,而是realpath!”呃……发声的这仁兄一如既往的稳定,妥妥的第四顺位,没毛病!

 

满足你,来看看abspath跟realpath有啥区别吧,尤其是在应对非英文路径上。首先touch一个文件及其link。

$ ll
lrwxrwxrwx  1 test test  Aug 15 03:48 mc -> silva
-rw-rw-r--  1 test test  0 Aug 15 03:46 silva

随后编写一个简易的py测试文件并运行。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from  os.path import abspath, realpath

print abspath('silva')
print abspath('mc')

print realpath('silva')
print realpath('mc')

结果如下。

$ python path_test.py
/home/rabbitgod/数据/silva
/home/rabbitgod/数据/mc
/home/rabbitgod/数据/silva
/home/rabbitgod/数据/silva

路径都含有中文,无论是abs还是real打印结果都无任何异常,唯一的不同点在于realpath指向了背后的大佬silva而不是abs中的mc。

所以这真的是path的锅么?心情不错,再免费贴个偏方吧:一钱芯片,二两核桃,炖汤。 ​​​​得嘞,在完成了每日三捧哏的routine工作后,让我们来直接尝试fix问题吧,示意代码如下。

output_path = match.group(1)
link_dir = os.path.realpath(os.path.dirname(output_path).encode("utf-8")).decode("utf-8")

bundle_path = os.path.join(link_dir, bundle_name)
os.symlink(output_path.encode("utf-8"), bundle_path.encode("utf-8"))

毫无悬念,问题解决。

 

面对UnicodeEncodeError这样的问题,尝试总结解决方法如下。

一、在环境变量中,设置PYTHONIOENCODING=utf-8

export PYTHONIOENCODING=utf-8

二、为函数的encoding参数赋值

以python写文件的open方法为例:

f = codecs.open(r’./filepath’, ‘w’, encoding='utf-8')

三、设置标准输出编码

import io , sys

sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding='utf-8')

其实 py2中还提供了另外一个解决办法。

import sys

reload(sys)
sys.setdefaultencoding('utf8')

但是这种方法是不建议使用的,或者说是错误的,为什么呢?官方文档这么解释。

Set the current default string encoding used by the Unicode implementation. If name does not match any available encoding, LookupError is raised. This function is only intended to be used by the site module implementation and, where needed, by sitecustomize. Once used by the site module, it is removed from the sys module’s namespace.

引用 Python 核心开发者Python Unicode 支持的设计者和实现者 Marc-André Lemburg的一段话吧,他曾在某邮件列表中如是回复。(https://www.mail-archive.com/python-dev@python.org/msg44652.html)

The only supported default encodings in Python are:

Python 2.x: ASCII
Python 3.x: UTF-8

If you change these, you are on your own and strange things will
start to happen. The default encoding does not only affect
the translation between Python and the outside world, but also
all internal conversions between 8-bit strings and Unicode.

Hacks like what's happening in the pango module (setting the
default encoding to 'utf-8' by reloading the site module in
order to get the sys.setdefaultencoding() API back) are just
downright wrong and will cause serious problems since Unicode
objects cache their default encoded representation.

Please don't enable the use of a locale based default encoding.

If all you want to achieve is getting the encodings of
stdout and stdin correctly setup for pipes, you should
instead change the .encoding attribute of those (only).

--

Marc-Andre Lemburg
eGenix.com

从此可见,Python 2 唯一支持的内部编码只有 ASCII,更改其默认编码可能会引发各种奇葩问题。在这里他也说了使用 sys.setdefaultencoding() 的方法是不折不扣的错误,正确的方法应该是修改 stdout 和 stdin 的encoding,还请诸位慎之又慎。

Linux中PATH,LIBRARY_PATH和LD_LIBRARY_PATH简单说明 本文主要描述关于Linux中PATH,LIBRARY_PATH和LD_LIBRARY_PATH的简单说明 阅读详情

相关推荐

Linux中PATH、LIBRARY_PATH、LD_LIBRARY_PATH的作用

当编译源代码时,编译器会在这些目录中查找指定的库文件,以便将其链接到可执行文件中。变量中追加 /compile_lib_path/lib 目录,以后编译程序时,编译器将会在 /compile_lib_path/lib 目录中进行库文件的搜索。变量中追加 /ld_path/bin 目录,以后运行程序时,动态链接器将会在 /ld_path/bin 目录中进行共享库的搜索。当运行一个命令时,操作系统会在这些目录中查找相应的可执行文件,并在找到后执行它。此命令将把/exe_path/bin目录添加到系统的。

个人学习记录 1856

./configure 出现package was not found问题的解决办法

提示信息大概是这个样子The required package $PACKAGE_NAME was not found on your system. *** Please install $PACKAGE_NAME (atleast version $version) or adjust *** the PKG_CONFIG_PATH environment variable if you ***

93吸血鬼的学习笔记 6645

C++和蓝图1:Unreal Engine 中 C++ 与蓝图的桥梁

摘要: 本文介绍了Unreal Engine(UE)中C++与蓝图可视化脚本的结合机制,重点解析了宏系统(UCLASS、UPROPERTY、UFUNCTION)如何实现代码与蓝图的交互。相比Unity的纯C#脚本模式,UE的双轨制开发允许程序员用C++处理核心逻辑,同时通过蓝图让非程序员快速迭代。文章对比了两大引擎的编程范式差异,指出UE的反射系统和宏标记提供了更精细的控制,并给出了从Unity迁移到UE的具体思路。核心在于理解UE的混合编程优势:C++保证性能,蓝图提升开发效率,二者通过宏系统无缝协作。

qq_46348216的博客 1407

PackageNotFound解决方法

当我想安装pyscreenshot包时,使用命令conda install pyscreenshot,报错如下: 于是我尝试了命令anaconda search -t conda pyscreenshot,依然没有成功: 最终解决方法:直接pip install pyscreenshot

weixin_43928099的博客 3460

攻克JESD204B多ADC同步:从时钟对齐到数据对齐的实战解析

本文深入解析了JESD204B多ADC同步的系统性挑战与实战解决方案。从确保设备时钟同源、精确捕获SYSREF信号,到管理接收端弹性缓冲区与释放点,文章提供了从时钟对齐到数据对齐的完整调试路径与排查清单,是攻克高速数据采集系统中多片ADC同步难题的实用指南。

weixin_29231725的博客 197

深入解析高通Adreno DPU的DRM/KMS驱动架构与硬件协同设计

本文深入解析了高通Adreno DPU的DRM/KMS驱动架构与硬件协同设计,详细介绍了Adreno DPU的核心模块组成、显示接口设计以及DRM驱动架构。通过实际案例和调试技巧,帮助开发者理解硬件与软件的协同工作原理,优化显示性能并解决常见问题。

weixin_29266679的博客 438

React Native常见报错解决整理

React Native从开发环境到入门练手,再到跑几个开源demo的整个过程中,遇到了不少问题,以下是对报错现象及解决方法的记录: Mac上运行iOS项目 问题1: npm ERR! Unexpected end of JSON input while parsing near ‘…ire-main-filename":"^’ 问题1解决: 运行npm cache clean–force 问题2...

小小T的专栏 2万+

什么是Merkle树?用“文件柜”类比理解区块链的核心技术

Merkle树是一种用于区块链的数据结构,像一个高效的“文件柜”,用于存储和验证大量交易数据。比特币通过Merkle树将交易哈希组织成树状结构,层层汇总,最终生成一个唯一的根哈希,存储在区块头中。这种设计大幅减少数据存储和验证成本,支持快速校验交易的完整性和存在性。Merkle树通过密码学保证数据不可篡改,广泛应用于比特币、区块链及其他分布式系统。它的优势在于高效、轻量和安全,尤其适合轻节点验证和数据同步。理解Merkle树就像掌握区块链的“索引秘籍”,是Web3世界的关键技术。

在路上的专栏 1192

关于Anaconda中PackageNotFoundError: Package not found: '' Package missing in current

摘要:一、Anaconda作为一个工具包集成管理工具,下载python工具包是很方便的,直接敲:condainstallpackage_name但是有时候安装一个工具包(如xmltodict)的时候,在当前的channels中找不到这个包,会提示:condainstallpydotFetchingpackagemetadata.......Solvingpackagespecifications:...

yaochen2507的博客 2万+

OpenHarness代码解读

Harness 是包裹在大模型之外、为其赋予完整执行能力的全套基础设施。模型负责提供智能与推理,Harness 则为模型提供感知、行动、记忆、工具与安全约束,使其从语言模型变成可自主完成复杂任务的实用智能体。我这里把向量数据库方案定义为:把对话片段、事件、偏好、工具结果等切成 memory chunks,做 embedding,存进向量库,查询时靠 ANN 相似度召回,再交给 LLM 读。AAAI 的综述类论文就明确指出,很多 LLM agent 的长期记忆就是这么做的。AAAI 期刊把文件系统方案。

qq_52053775的博客 188

【论文复现】——基于改进FPFH特征提取的点云模板匹配方法

基于改进FPFH特征提取的点云模板匹配方法 [J]. 应用激光, 2024, 44 (04): 196-204.

点云侠的博客 611

Anaconda安装第三方库,遇到PackageNotFoundError: ‘‘Package missing in current channels“

Anaconda安装第三方库,遇到PackageNotFoundError: ''Package missing in current channels" 完美解决 我们在开发过程中总是需要借助第三方库,而通常第三方库都会通过anaconda环境安装,有时在安装过程中会遇到如下问题: 使用命令: 1 conda install package_name 报错: PackageNotFoundError: Packages missing in current channels: package_name

nihaoa_1898的博客 1457

如何给数据添加高斯白噪声?

首先测试集应该是加噪声的,至于训练集需不需要加噪声就见仁见智了。我个人测试的结果是,训练集如果不加噪声的话效果特别差,如果加噪声的话效果就比较好接受,大家可以自己试试看。在轴承故障研究中免不了要涉及到给数据主动加入噪声的情况,一般我们加的是高斯白噪声。由于热噪声是由大量自由电子的运动产生的,其统计特性服从高斯分布,故常将热噪声称为高斯白噪声。的频谱是均匀分布的,好像白光的频谱在可见光的频谱范围内均匀分布那样,所以热噪声又常称为。定义一:如果一个噪声,它的瞬时值服从。又是均匀分布的,则称它为高斯白噪声。

weixin_50642818的博客 5220

Linux中PATH、 LIBRARY_PATH、 LD_LIBRARY_PATH的区别

这里写目录标题1. PATH2. LIBRARY_PATH3. LD_LIBRARY_PATH 1. PATH PATH是可执行文件路径 命令行中的命令,如ls等等,都是系统通过PATH找到了这个命令执行文件的所在位置,再run这个命令(可执行文件)。 所以,PATH 配置的路径下的文件可以在任何位置执行,并且可以通过which 可执行文件 命令来找到该文件的位置 查看PATH pi@raspberrypi:~ $ echo $PATH /usr/local/sbin:/usr/local/bin:/u

weixin_48859611的博客 4万+

30天Python入门(第一天:Python入门)

30天带你入门Python,这是第一天

Science prince的博客 584

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Linux关于 PATH / LD_LIBRARY_PATH / LIBRARY_PATH环境变量的设置和区别

1.1、

weixin_46158019的博客 3236

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

linux删除某个path_linux 从path中去掉某个

1添加路径到PATH 添加路径可以直接给PATH赋值 export PATH=$PATH:新添加的路径 (关闭终端失效) $PATH是当前的路径1:路径2:路径3 ,在后面追加:新添加的路径,然后把这个新的路径集赋值给PATH本身,相当于覆盖了原PATH变量.export命令是导出变量,相当于更新PATH 2删除PATH中的路径 删除PATH中的某个路径也是用以上重新给PATH赋值的方法,比如当前PATH是 echo $PATH 路径1:路径2:路径3:路径4 要删除路径4,只需..

digitalkee的博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

CMAKE_MODULE_PATH 与 CMAKE_PREFIX_PATH

两个cmake参数很像,查看了官方文档 CMAKE_PREFIX_PATH是以分号分隔的列表,供find_package(), find_program(), find_library(), find_file()和find_path()使用,初始为空,由用户设定 CMAKE_PREFIX_PATH 官方链接 CMAKE_MODULE_PATH是以分号分隔的列表,供include()或 find_...

LaineGates的专栏 2万+

python之 os.path和sys.path

1、os.path 和 sys.path 区别 os即operating system(操作系统),Python 的 os 模块封装了常见的文件和目录操作 os.path 主要是 用于对系统路径文件的操作 sys.path 主要是 对 Python 解释器的系统环境参数的操作(动态的改变 Python 解释器搜索路径) 2、常用的命令 import sys import os.p...

mingyuli的博客 4085

Linux中PATH、 LIBRARY_PATH、 LD_LIBRARY_PATH

PATH和分别负责可执行文件、库文件编译时和运行时的路径搜索任务。这些环境变量可以通过export命令来修改,向环境变量中添加新路径(比如上面的示例),或者移除已有路径。环境变量那些事儿。

qq_40642828的博客 2271

PATH和path,傻傻分不清

习惯了Windows电脑下的所见即所得,找到程序或文件双击即可运行或打开;于是我们被惯得以为电脑会像人一样聪明,给他一个名字就可以运行程序或打开文件;于是在命令行下或程序里不断碰壁,为啥这个命令不运行了呢? 我们不能太高估电脑(或操作系统),不要以为只要输入一个程序名或文件名,电脑(或操作系统)就可以满硬盘的去找这个文件在哪;这一来效率太低了,二来重名了怎么办?比如有2个文件都叫“子房.txt”,...

悟道西方 2048

Python os.path、sys.path

一、sys.path 我们首先了解下PATH、PYTHONPATH 和 sys.path 的区别 PATH 在PATH中的 python module 不能被 import,在 PATH 中的一些命令,例如 *.exe,可以直接在cmd中运行,而不用明确的路径,我们在给 python 安装一些 packages 的时候,有一些 Scripts 被安装到 /Scripts 文件夹中,如果 /S...

阿茂丶 2107

【工程与环境】Ubuntu:环境变量PATH、LIBRARY_PATH和LD_LIBRARY_PATH的区别

今天写有关PATH的时候发现还有LIBRARY_PATH和LD_LIBRARY_PATH这两个系统环境变量,到底这这三个系统变量到底有什么区别呢? PATH 之前配置我们就需要设置PATH,配置环境,否则使用: nvcc -V 就会出现问题,所以PATH主要是系统通过PATH这个环境变量来获得可执行文件所在的位置,然后在运行一下对应的可执行文件,我们通过printenv命令查看一下: 可以看到...

Felaim的博客 2645

path环境变量满了如何处理,分割 PATH 到 Path1 和 Path2

本文详细介绍了如何正确设置 Path1 和 Path2 的值,以扩展 PATH 环境变量的容量。首先,通过系统属性窗口获取并复制当前 PATH 的值。接着,创建 Path1 和 Path2,将 PATH 中的路径平均分配到这两个变量中,确保每个变量的长度不超过 2047 字节。然后,修改主 PATH 变量,使其动态引用 Path1 和 Path2 的内容。最后,验证设置是否生效,并提供了常见问题的解决方法。通过以上步骤,可以安全地扩展 PATH 环境变量,同时保持系统的稳定性。

Leon的博客 933

Linux环境变量设置(PATH/LIBRARY_PATH/LD_LIBRARY_PATH)

参看链接: https://baike.baidu.com/item/LD_LIBRARY_PATH/9391538?fr=aladdin

M2嵌入式 5695
上一篇: 为moment.js正名
下一篇: Base64与国际化
国际化梦工厂
博客等级 码龄11年 18粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值