【问题标题】:python TypeError: must be encoded string without NULL bytes, not str - docker iron requirements.txtpython TypeError:必须是没有NULL字节的编码字符串,而不是str - docker iron requirements.txt
【发布时间】:2016-04-14 16:09:47
【问题描述】:

我一直在尝试将 python 脚本部署到 Iron.io。他们建议在上传之前使用 docker 在本地进行测试。

我已经完成their provided docker/iron tutorial 没有错误。

所以我开始从他们的示例 repo 修改 the provided requirements.txt 以启动我自己的项目,但是每当我尝试在本地安装包时,我都会收到 TypeError。

我的点子是版本:

pip 7.1.2 from /Library/Python/2.7/site-packages (python 2.7)

他们的要求.txt

iron-mq>=0.5
iron-worker>=1.3.1

我的要求.txt

iron-mq>=0.5
iron-worker>=1.3.1
beautifulsoup4
html5lib

终端命令:

$ docker run --rm -v "$PWD":/worker -w /worker iron/python:2-dev pip install -t packages -r requirements.txt

错误:

Exception:
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/pip/basecommand.py", line 211, in main
    status = self.run(options, args)
  File "/usr/lib/python2.7/site-packages/pip/commands/install.py", line 282, in run
    wheel_cache
 File "/usr/lib/python2.7/site-packages/pip/basecommand.py", line 291, in populate_requirement_set
    wheel_cache=wheel_cache):
 File "/usr/lib/python2.7/site-packages/pip/req/req_file.py", line 89, in parse_requirements
    for req in req_iter:
 File "/usr/lib/python2.7/site-packages/pip/req/req_file.py", line 137, in process_line
    isolated=isolated, options=req_options, wheel_cache=wheel_cache
 File "/usr/lib/python2.7/site-packages/pip/req/req_install.py", line 168, in from_line
    if (os.path.isdir(p) and
 File "/usr/lib/python2.7/genericpath.py", line 49, in isdir
    st = os.stat(s)
 TypeError: must be encoded string without NULL bytes, not str

我在 OSX 上使用 Sublime 并使用 UTF-8 进行编码。有关此错误的其他线程通常通过转义某些字符或更改编码来解决。但是我找不到可以使用的替代编码。

在没有任何空字节的情况下保存需求是否有技巧?还是有其他已知的修复方法?

编辑更新:

使用 pip 的 -vvv max 详细模式运行

docker run --rm -v "$PWD":/worker -w /worker iron/python:2-dev pip install -vvv -t packages -r requirements.txt

返回

Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/pip/basecommand.py", line 211, in main
    status = self.run(options, args)
  File "/usr/lib/python2.7/site-packages/pip/commands/install.py", line 282, in run
    wheel_cache
  File "/usr/lib/python2.7/site-packages/pip/basecommand.py", line 291, in populate_requirement_set
    wheel_cache=wheel_cache):
  File "/usr/lib/python2.7/site-packages/pip/req/req_file.py", line 89, in parse_requirements
    for req in req_iter:
  File "/usr/lib/python2.7/site-packages/pip/req/req_file.py", line 137, in process_line
isolated=isolated, options=req_options, wheel_cache=wheel_cache
  File "/usr/lib/python2.7/site-packages/pip/req/req_install.py", line 168, in from_line
    if (os.path.isdir(p) and
  File "/usr/lib/python2.7/genericpath.py", line 49, in isdir
    st = os.stat(s)
TypeError: must be encoded string without NULL bytes, not str
Starting new HTTPS connection (1): pypi.python.org
"GET /pypi/pip/json HTTP/1.1" 200 50975

唯一的新输出是底部的两行。

运行 iconv 来识别任何流氓字符只会返回 txt 文件的内容。

iconv -t UTF-8 requirements.txt

iron-mq>=0.5
iron-worker>=1.3.1
beautifulsoup4==4.4.1

【问题讨论】:

  • 您使用的是什么版本的 pip?您是否尝试过升级到最新版本?另外,您可以尝试启用最大详细度的安装命令吗? (pip install -vvv ...)
  • 听起来您的需求文件中确实有一些流氓特殊字符 - 请参阅 cmets 关于这个类似问题 stackoverflow.com/questions/30816367/…
  • @therefromhere pip 版本和添加到原始帖子的附加输出。

标签: python docker pip iron.io


【解决方案1】:

我在 Mac 上使用 Iron docker 映像运行 pip install 时遇到了同样的问题。在尝试了很多方法来修复它之后,我将问题追溯到 Docker Toolbox 和 vboxfs。他们没有正确同步主机文件系统更改。为了修复它,在我运行的 docker 工具箱 VM 中:

sync; echo 3 > /proc/sys/vm/drop_caches

sync 调用将所有挂起的写入同步到磁盘。第二个命令告诉内核清除文件系统缓存。

一旦我这样做了,我的 pip install 就可以正常工作了。

【讨论】:

    【解决方案2】:

    在 Windows 和 Mac OS 上,Docker Daemon 在虚拟机上运行。

    尝试进入虚拟机并在那里运行 Docker 命令。解决此问题的一种可能方法是避免在主机上运行 Docker 命令。

    提醒一下,Iron.io 的支持可以通过电话、电子邮件或chat 获取其他问题。

    【讨论】:

      猜你喜欢
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      相关资源
      最近更新 更多