导语:
- 开发机信息:操作系统 Debian,CPU 8 核,内存 16 GB
- 内容:主要记录安装环境中遇到的各种棘手坑及解决方案
- 装后感:在放弃的边缘挣扎到成功...
一、GitLab Runner 安装与注册 -
问题1:cannot execute binary file: Exec format error
原因:gitlab-runner 版本没安装对,需要安装 Debian 系统对应的 gitlab-runner。
解决方案:
- 安装完成后执行 gitlab-runner register,若报错 -bash: /usr/local/bin/gitlab-runner: No such file or directory,转到下面 2
- 若遇到上面的 No such file or directory 错误,按照 Gitlab-CI 初级篇 - Gitlab Runner 中的下载部分,执行一次 sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64 即可,其他的不用看,重新执行 gitlab-runner register
- 参考资料:
问题2:project runner is green, but builds are pending forever(已执行 gitlab-runner start)
原因:没弄太明白, 配置了3 次集成环境,每次解决方案都不同。第一次用下面的方案 1 成功,第二次方案 2 成功,第三次执行完 gitlab-runner start 直接就成功了。
解决方案:
- gitlab-runner 配置 tags - 未成功、成功都有
- 执行 gitlab-runner run - 成功
- 参考资料:
二、Python 3.6.1 的安装与使用 -
为啥要安装 Python 3.6.1?因为开发机自带的 Python 版本为 2.7、3.5.3,项目 CI 脚本需要用到 Python 3.6+ 的特性,不安装无法正常执行...
问题1:python pip3 安装三方包 Could not find a version that satisfies...
原因:pip 版本过低;网不稳定,需用国内的镜像源来加速。
解决方案:
- 执行 python -m pip install --upgrade pip,若不成功转到下面 2
- 执行 pip3 install ${包名} -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
- 参考资料:
问题2:xxx 模块已安装,还是无法导入 xxx 模块 (项目中为 backoff )
原因:xxx 模块安装目录没对。当系统中有多个 Python 版本时,需用不同的 pip 命令来区分使用哪个 Python 版本进行安装三方包。
解决方案:
- Python2 安装三方包:pip install ${包名}
- Python3 安装三方包:pip3 install ${包名}
- 参考资料:
问题3:requests.exceptions.SSLError (Can't connect to HTTPS URL because the SSL module is not available)
原因:系统 openssl 已经安装了,python2 可以调用,新安装的 python3 不能调用,需要额外配置。
解决方案:
尝试了 n 种方法,直到系统不能工作,只能选择了放弃...
- 尝试1:安装 openssl 开发包 libffi-devel,失败
- 尝试2:重新安装 Python 3.6.1,./configure 添加--with-ssl、--with-openssl,失败
- 尝试3:Python 版本升级 3.8.5,配置 openssl 路径,失败
- 尝试4:修改 Python 源码目录下的 ./Modules/Setup 文件重新编译,失败
- 参考资料:
问题4:fatal error: openssl/aes.h: No such file or directory
原因:系统确少 openssl 开发包,需进行安装
解决方案:
- 执行 sudo apt-get install libssl-dev,安装 openssl 开发包
- 参考资料:
问题5:/usr/bin/apt-listchanges permission denied(sudo 无效)
原因:解决上面各种问题时,在开发机上进行了很多乱七八糟的操作,可能把什么系统文件搞坏了-_-||
解决方案:
- 尝试了下面 "参考资料"中的各种方式依然无效,apt 相关的操作都失败。最后只能选择重装系统...
- 参考资料:
三、Python 3.5.3 的使用 -
问题1:-bash: pip: command not found
解决方案:
- Python2 执行:python -m pip ${包名}
- Python3 执行:python3 -m pip ${包名}
- 参考资料:
问题2:执行 python/python3 -m pip install xxx 报错 TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'
解决方案:
- 执行命令加上后缀 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com。如python3 -m pip ${包名} -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
- 参考资料:
问题3:import backoff 模块,开发机运行正常,但是 CI 脚本执行出错,无法 import
原因:Debian 系统中 dist-packages 取代了site-packages。使用 Debian 软件管理器安装的三方 python 包会被安装到 dist-packages 而不是 site-packages,这样能减少系统自带 python 和用户手动安装的 python 之间的冲突。若使用的是系统自带 python,都会从 dist-packages 中去读取软件包,而使用的 backoff 模块被安装到了 site-packages (详见不同安装方式的安装位置),识别失败。
解决方案:
🙈🤦♀️找不到参考资料,只能自己折腾找路子🙇♂️🧐:
image
【1】查看 sys 的路径。图中可看出有 site-packages 和 dist-packages,可能跟这两个关系。
【2】查看 python 的库路径。使用的是 dist-packages。
image
【3】查看 site-packages 和 dist-packages 两个文件内容 diff。可以看到 backoff 相关的只在 site-packages 中有,项目的 CI 脚本 requests模块(dist-packages 目录中)是可以正常导入的,但 backoff 不能正常导入,推论将其移动到 dist-packages 目录中即可正常使用了。
image
【4】证实推论,将 backoff 相关的内容拷贝到 dist-packages 中。重新运行可以正常导入 backoff!
【5】查资料对比 dist-packages 和 site-packages 的区别:
问题4:使用 pipenv 出错 ImportError: No module named appdirs
原因:跟问题3 类似。因为在非 root 模式下使用 pip 安装的 pipenv,都被放在了 site-packages 中。
解决方案:
- 将 site-packages 目录中 pipenv 相关的库都拷贝或移动到 dist-packages 中去,即可正常使用 pipenv。
问题5:You can specify specific versions of Python with: $ pipenv --python path/to/python
原因:系统安装了多个 Python 版本并同时安装了 pipenv,使用时需指定 Python 版本
解决方案:
- 使用 pipenv 时指定 python 版本,如python3 -m pipenv install --python 3.5
- 参考资料:
问题6:使用 "f-string" 进行字符串拼接,报错 “invalid syntax”
原因:Python3.6+ 才支持用 "f-string" 拼接字符串
解决方案:
- 使用 Python3.6 版本以下支持的方式进行字符串拼接,如'hello{}'.format('world')
- 参考资料:
附:
// 查看 python sys 的路径
$ python3
>>> import sys
>>> print ('\n'.join(sys.path))
// 查看 python 的库路径
$ python3
>>> from distutils.sysconfig import get_python_lib
>>> print(get_python_lib())
其他参考:
网友评论