每次打开终端时得到 "No command 'pew' found" (Ubuntu 16.04)

Getting "No command 'pew' found" every time I open the Terminal (Ubuntu 16.04)

我目前正在使用 Ubuntu 16.04 LTS。

问题是当我打开一个终端时,我收到这条消息。

No command 'pew' found, did you mean:
 Command 'pyew' from package 'pyew' (universe)
 Command 'new' from package 'nmh' (universe)
 Command 'pen' from package 'pen' (universe)
 Command 'pex' from package 'pex' (universe)
 Command 'pmw' from package 'pmw' (universe)
 Command 'peg' from package 'peg' (universe)
 Command 'paw' from package 'paw-common' (universe)
 Command 'spew' from package 'spew' (universe)
 Command 'pev' from package 'pev' (universe)
 Command 'pee' from package 'moreutils' (universe)
 Command 'psw' from package 'wise' (universe)
pew: command not found
bash: : No such file or directory
ubuntu@ubuntupc:~$ 

我在尝试安装时收到此消息,并且 运行 这个 CVPR project

我做的是

  1. made a virtual environment ubuntu@ubuntupc:~/Downloads/camconvs-master$ virtualenv -p /usr/bin/python3.5 cvpr_env
  2. activated virtual environment ubuntu@ubuntupc:~/Downloads/camconvs-master$ source cvpr_env/bin/activate
  3. installed project requirements (cvpr_env) ubuntu@ubuntupc:~/Downloads/camconvs-master$ pip install -r requirements.txt
  4. installed cmake-setuptools (cvpr_env) ubuntu@ubuntupc:~/Downloads/camconvs-master$ pip install cmake-setuptools
  5. installed pew (cvpr_env) ubuntu@ubuntupc:~/Downloads/camconvs-master$ pip install pew
  6. did these (cvpr_env) ubuntu@ubuntupc:~/Downloads/camconvs-master$ cd lmbspecialops
  7. (cvpr_env) ubuntu@ubuntupc:~/Downloads/camconvs-master/lmbspecialops$ python setup.py install
  8. (cvpr_env) ubuntu@ubuntupc:~/Downloads/camconvs-master/lmbspecialops$ pew add python
  9. (cvpr_env) ubuntu@ubuntupc:~/Downloads/camconvs-master/lmbspecialops$ cd ..
  10. (cvpr_env) ubuntu@ubuntupc:~/Downloads/camconvs-master$ export LMBSPECIALOPS_LIB="/path/to/camconvs/lmbspecialops/build/lib.linux-x86_64-3.5/lmbspecialops.so"
  11. (cvpr_env) ubuntu@ubuntupc:~/Downloads/camconvs-master$ pew add python/

执行这些操作后,每次打开新终端并重新启动系统时都会显示该消息并没有解决此问题。

我是 Ubuntu 的新手,我不知道我对系统做了什么。问题是,如何停止显示这些消息?

更新 2

我的~/profile是这个?抱歉,我不确定。

ubuntu@ubuntupc:/etc$ sudo cat profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "$PS1" ]; then
  if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

我也检查了 profile.d 文件夹,但我看不到任何与 pew 相关的东西。

ubuntu@ubuntupc:/etc$ ls profile.d
appmenu-qt5.sh    bash_completion.sh     vte-2.91.sh
apps-bin-path.sh  cedilla-portuguese.sh

在我看来,您在这里所做的是在您的虚拟环境 (cvpr_env) 中而不是在您的主机系统中安装 pew。当您打开一个新终端时,它会运行并执行您 ~/.profile 中的命令,所以我猜 pew 可能编辑了该文件?里面有什么与 pew 相关的吗?

正如所指出的,问题的原因是这样的:

  1. installed pew (cvpr_env) ubuntu@ubuntupc:~/Downloads/camconvs-master$ pip install pew

您在 virtualenv 中安装了 pew

中所述,安装 pew 会在 standard bin 文件夹之一下安装一个二进制文件,通常是 /usr/local/bin//home/<username>/.local/bin/usr/bin,取决于您的 Python/pip 安装权限。

gino:~$ python3 -m pip install --user pew
Requirement already satisfied: pew in ./.local/lib/python3.6/site-packages (1.2.0)
Requirement already satisfied: virtualenv>=1.11 in /usr/local/lib/python3.6/dist-packages (from pew) (16.6.0)
Requirement already satisfied: setuptools>=17.1 in /usr/lib/python3/dist-packages (from pew) (39.0.1)
Requirement already satisfied: virtualenv-clone>=0.2.5 in /usr/local/lib/python3.6/dist-packages (from pew) (0.5.3)

gino:~$ which pew
/home/gino/.local/bin/pew

注意我说的是 标准 文件夹,因为在 Ubuntu 上,这些文件夹路径默认包含在 PATH 环境变量中。用 echo $PATH 试试。这是系统找到可执行文件的所有路径的列表。这样当我只输入 pew(没有完整路径)时,系统就知道在哪里可以找到它。如果不能,它会抛出您得到的错误:“找不到命令 'pew'”。

现在,回到您所做的事情,因为您在虚拟环境 (cvpr_env) 中安装 pew,然后 pew 将安装在该虚拟环境的 bin文件夹:

gino:~$ upvenv cvpr_env
(cvpr_env) gino:~$ pip install pew
...
Successfully installed appdirs-1.4.3 distlib-0.3.0 filelock-3.0.12 importlib-metadata-1.5.0 pew-1.2.0 six-1.14.0 virtualenv-20.0.5 virtualenv-clone-0.5.3 zipp-3.0.0

(cvpr_env) gino:~$ which pew
/home/gino/.venvs/cvpr_env/bin/pew

.. 并且虚拟环境目录的路径不是 PATH 中列出的 标准 路径的一部分。您可以在 pew 行之前的 .bashrc 中添加 echo $PATH 行以打印所有路径。

那怎么办? 以下是可能的解决方案:

  1. 安装pew在虚拟环境之外

    • 恕我直言,这是最简单的。
    • 来自pew docs, it is supposed to be a wrapper for the Python virtual environment. So you use it to activate and work inside a virtual env. You don't need to manually do virtualenv activate to use cvpr_env. Check the common workflow的用法。
    • 根据 canconvs 说明,它说使用 pew 作为您的虚拟环境。
  2. 如果您已经拥有自己的虚拟环境,则无需安装和使用pew。但是,如果您真的想要在虚拟环境中拥有pew(不确定这将如何工作),您可以执行以下操作之一:

    • /path/to/venv/bin/pew 添加到您的 PATH 环境变量。在 .bashrc 中,在调用 pew 的行 之前添加这些 (在您的虚拟环境中使用 which pew 以获得正确的路径)
      export PATH="$PATH:/path/to/your/venv/bin/pew"
      
    • .bashrc 中指定 pew 的完整路径
      /path/to/your/venv/bin/pew ...