【问题标题】:On Windows why does "poetry shell" remove/lose shell history features?在 Windows 上,为什么“诗歌外壳”会删除/丢失外壳历史功能?
【发布时间】:2021-12-14 08:50:39
【问题描述】:

在 Windows 默认命令外壳 (cmd.exe) 中,您可以使用各种控件访问键入命令的历史记录(向上箭头表示最近的命令等)。

当你使用“poetry shell”命令生成一个新的虚拟环境时,你会生成一个新的 shell,但是历史命令(如向上箭头和 F7)不起作用,如果你运行 doskey /history 它会给你运行“poetry shell”命令之前的命令历史记录。

如果您运行 cmd.exe 来生成另一个 shell,这也会禁用历史记录。

关于为什么会发生这种情况或如何获得禁用历史记录的命令 shell 的任何想法?

谢谢

【问题讨论】:

    标签: windows shell python-poetry


    【解决方案1】:

    thread 很好地解释了这个问题。应用the bottom of the thread 定义的set_console_history_info(),我能够对我的Poetry 副本进行快速的概念验证,看看在运行poetry shell 时是否可以获得更好的cmd.exe。而且它似乎有效。

    我发布了我的 p.o.c。 here.

    【讨论】:

      【解决方案2】:

      我认为您所说的问题应该是 venv 错误。您可以使用以下命令重现它:

      lenovo@LENOVO-PC D:\gym\works\opencv-python-demo
      # .venv\Scripts\activate.bat
      
      (.venv) lenovo@LENOVO-PC D:\gym\works\opencv-python-demo
      # python test_subprocess_open_cmd.py
      

      “test_subprocess_open_cmd.py”文件内容如下:

      
      import os
      import subprocess as subprocess
      
      exe = subprocess.Popen([os.environ.get("COMSPEC")])
      exe.communicate()
      print(exe.returncode)
      
      

      类似的代码出现在poetry source code

      【讨论】:

        【解决方案3】:

        这绝对是使用诗歌的痛点之一。我不知道是什么原因造成的。我的解决方法:激活 Poetry 手动创建的虚拟环境。这避免了 Poetry 干扰 cmd.exe 历史的任何行为。为此,我询问 Poetry 它在哪里创建了它的 venv,然后复制并粘贴它加上 Scripts\activate 以输入一个工作 venv。例如:

        C:\>poetry env info
        
        Virtualenv
        Python:         3.9.8
        Implementation: CPython
        Path:           C:\Users\xxx\AppData\Local\pypoetry\Cache\virtualenvs\
        runestone-poetry-project-kVed82-L-py3.9
        Valid:          True
        
        System
        Platform: win32
        OS:       nt
        Python:   C:\Users\xxx\AppData\Local\Programs\Python\Python39
        
        C:\>C:\Users\xxx\AppData\Local\pypoetry\Cache\virtualenvs\
        runestone-poetry-project-kVed82-L-py3.9\Scripts\activate
        (runestone-poetry-project-kVed82-L-py3.9) C:\>
        
        

        另一种解决方法:改用poetry run pwsh 运行PowerShell;它的历史运行正常(当然,PowerShell 与 cmd 非常不同)。

        【讨论】:

          猜你喜欢
          • 2012-10-12
          • 1970-01-01
          • 2010-09-07
          • 2011-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多