ImportError: No module named '自定义函数'
现象:使用命令行运行程序包中的某个文件,会出现类似如下报错
$ python tests/test_utils.py
Traceback (most recent call last):
File "tests/test_utils.py", line 7, in <module>
from run_api import app
ImportError: No module named 'run_api'
解决办法:添加程序根目录到 PYTHONPATH
变量中
进入到程序根目录
export PYTHONPATH=.
windows 环境执行:set PYTHONPATH=.
# 然后执行相关命令
python tests/test_utils.py
Windows环境某些情况下转码异常
现象:在Windows下的CMD执行正常,但是在第三方系统提供的console中执行有类似如下报错
UnicodeEncodeError
'gbk' codec can't encode character '\xa0' in position 22: illegal multibyte sequence
at F:\Program Files\Python39\lib\site-packages\clikit\io\output_stream\stream_output_stream.py:24 in write
20│ """
21│ if self.is_closed():
22│ raise io.UnsupportedOperation("Cannot write to a closed input.")
23│
→ 24│ self._stream.write(string)
25│ self._stream.flush()
26│
27│ def flush(self): # type: () -> None
28│
解决办法:在执行命令之前配置变量 PYTHONIOENCODING=utf-8
进入到程序根目录
PYTHONIOENCODING=utf-8
windows 环境执行:set PYTHONIOENCODING=utf-8
# 然后执行相关命令
poetry help
使用 subprocess
模块操作svn报认证失败的错误
现象:直接使用命令行操作svn没有问题,使用python操作svn命令有类似如下报错
svn: E215004: No more credentials or we tried too many times.
Authentication failed
解决办法:在svn命令行使用 --username --password --no-auth-cache
参数
在Windows下使用 shutil.rmtree 删除目录报权限错误
现象:执行 shutil.rmtree(path)
有类似如下报错
WindowsError: [Error 5] Access is denied: 'build\\tcl\\tcl8.5\\msgs\\af.msg'
一般情况是因为该文件具有只读属性造成的,解决办法:添加onerror方法
import os
import stat
import shutil
def remove_readonly(func, path, excinfo):
os.chmod(path, stat.S_IWRITE)
func(path)
shutil.rmtree(top, onerror=remove_readonly)
Windows下批量去除目录的只读属性
def remove_windows_readonly(path: Union[str, list]):
if isinstance(path, str):
path = [path]
if isinstance(path, list):
for i in path:
subprocess.run(f"attrib -R {i}/* /S /D")
如果被装饰器修饰的函数具有返回值,一定要在装饰器上同时返回,否则后续调用该函数是无法获取返回值的
文章评论