我的MacOS Terminal不允许我在没有sudo的情况下执行Python命令

时间:2020-08-09 19:50:09

标签: python macos importerror sudo macports

当我尝试从终端执行命令时,我不断收到错误描述:ImportError: / Symbol not found: / Expected in:。 但是,当我使用sudo执行同一命令时,不会出现该错误。

例如:

$ pip search matplotlib

返回:

Traceback (most recent call last):
  File "/opt/anaconda3/bin/pip", line 11, in <module>
    sys.exit(main())
  File "/opt/anaconda3/lib/python3.8/site-packages/pip/_internal/cli/main.py", line 73, in main
    command = create_command(cmd_name, isolated=("--isolated" in cmd_args))
  File "/opt/anaconda3/lib/python3.8/site-packages/pip/_internal/commands/__init__.py", line 104, in create_command
    module = importlib.import_module(module_path)
  File "/opt/anaconda3/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/opt/anaconda3/lib/python3.8/site-packages/pip/_internal/commands/search.py", line 18, in <module>
    from pip._internal.cli.req_command import SessionCommandMixin
  File "/opt/anaconda3/lib/python3.8/site-packages/pip/_internal/cli/req_command.py", line 16, in <module>
    from pip._internal.index.package_finder import PackageFinder
  File "/opt/anaconda3/lib/python3.8/site-packages/pip/_internal/index/package_finder.py", line 21, in <module>
    from pip._internal.index.collector import parse_links
  File "/opt/anaconda3/lib/python3.8/site-packages/pip/_internal/index/collector.py", line 14, in <module>
    from pip._vendor import html5lib, requests
  File "/opt/anaconda3/lib/python3.8/site-packages/pip/_vendor/html5lib/__init__.py", line 28, in <module>
    from .serializer import serialize
  File "/opt/anaconda3/lib/python3.8/site-packages/pip/_vendor/html5lib/serializer.py", line 11, in <module>
    from xml.sax.saxutils import escape
  File "/opt/anaconda3/lib/python3.8/xml/sax/saxutils.py", line 6, in <module>
    import os, urllib.parse, urllib.request
  File "/opt/anaconda3/lib/python3.8/urllib/request.py", line 2619, in <module>
    from _scproxy import _get_proxy_settings, _get_proxies
ImportError: dlopen(/opt/anaconda3/lib/python3.8/lib-dynload/_scproxy.cpython-38-darwin.so, 2): Symbol not found: __cg_jpeg_resync_to_restart
  Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
  Expected in: /opt/local/lib//libJPEG.dylib
 in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO

但是当对同一命令进行sudo时,它会起作用:

$ sudo pip search matplotlib

返回:

WARNING: The directory '/Users/ja_jagg/Library/Caches/pip' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

django-matplotlib (0.1)             - Matplotlib field for Django
matplotlib-stream (1.0.0)           - GCPDS: matplotlib stream
hangar-matplotlib (0.0.3)           - Matplotlib plugin for hangar
...

执行ipython和许多其他命令时遇到相同的错误:

ImportError: dlopen(/opt/anaconda3/lib/python3.8/lib-dynload/_scproxy.cpython-38-darwin.so, 2): Symbol not found: __cg_jpeg_resync_to_restart
  Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
  Expected in: /opt/local/lib//libJPEG.dylib
 in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO

在理解此错误的原因以及如何解决该问题方面,我将不胜感激。我不得不使用pip install sudo来打包某些软件包,据我所知这是一种非常不好的做法,因此我想避免这种情况。谢谢。


编辑:

在安装Anaconda之前已经存在此问题。 我最近安装了Anaconda,并且长期使用MacPorts。我在两个发行版中都安装了Python 2和3。我遇到这个问题已经有好几年了,但是直到现在一直不是问题。

当使用与Anaconda中不同的IPython路径时,出现相同的错误:

$ which ipython
/Library/Frameworks/Python.framework/Versions/3.7/bin/ipython

$ ipython
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/bin/ipython", line 5, in <module>
    from IPython import start_ipython
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/IPython/__init__.py", line 55, in <module>
    from .terminal.embed import embed
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/IPython/terminal/embed.py", line 17, in <module>
    from IPython.terminal.ipapp import load_default_config
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/IPython/terminal/ipapp.py", line 28, in <module>
    from IPython.core.magics import (
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/IPython/core/magics/__init__.py", line 18, in <module>
    from .code import CodeMagics, MacroToEdit
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/IPython/core/magics/code.py", line 23, in <module>
    from urllib.request import urlopen
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 2583, in <module>
    from _scproxy import _get_proxy_settings, _get_proxies
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload/_scproxy.cpython-37m-darwin.so, 2): Symbol not found: __cg_jpeg_resync_to_restart
  Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
  Expected in: /opt/local/lib//libJPEG.dylib
 in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO

在两种情况下,重复元素都是文件/opt/local/lib//libJPEG.dylib

当我ls文件时,它返回:

lrwxr-xr-x  1 root  admin  15 Jan 13  2020 /opt/local/lib//libJPEG.dylib -> libjpeg.9.dylib
我了解的

是文件的符号链接:

-rwxr-xr-x  1 root  admin  215064 Jan 13  2020 /opt/local/lib//libjpeg.9.dylib

由于该命令可以在sudo上正常运行,并且问题文件位于/opt/local/中,所以我想知道此问题是否与MacPorts有关。可能是系统文件权限不足,或者.dylib损坏。

以防万一:

$ echo $DYLD_LIBRARY_PATH 
/usr/local/mysql/lib/:/opt/local/lib/libgcc:/usr/OpenMotif/lib:/usr/local/gfortran/lib:/usr/local/gfortran/lib/i386:/opt/local/lib/:

显而易见的解决方案是卸载MacPorts并进行全新安装。但是,该选项将非常激烈,因为它将影响我需要定期访问的其他进程。我只想确保这是采取合理措施。

对此,我将不胜感激。感谢您的时间和关注!

0 个答案:

没有答案