Python sys.path与控制台和运行时不同
我有一个简单的程序,Python sys.path与控制台和运行时不同,python,Python,我有一个简单的程序,job\u admin\u cli.py: import pyhocon import sys print(sys.path) 当我执行它时,我得到以下结果 myapptest-staging-dark-3 33.5.0-jscherman /opt/myapptest/staging/myapptest $ sudo python3 job_admin_cli.py ['/opt/myapptest/staging/myapptest', '/usr/lib/pytho
job\u admin\u cli.py
:
import pyhocon
import sys
print(sys.path)
当我执行它时,我得到以下结果
myapptest-staging-dark-3 33.5.0-jscherman /opt/myapptest/staging/myapptest $ sudo python3 job_admin_cli.py
['/opt/myapptest/staging/myapptest', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']
Traceback (most recent call last):
File "/opt/myapptest/staging/myapptest/job_admin_cli.py", line 1, in <module>
import pyhocon
ModuleNotFoundError: No module named 'pyhocon'
注意,它现在不仅可以导入pyhocon
模块,还可以在sys.path
中打印不同的路径
为什么会这样 您正在使用虚拟环境吗?您在两个示例之间的两个不同用户帐户下运行了
python
——使用sudo
将第一个示例切换到root
用户。尝试运行交互式控制台的sudo python3
,然后重做您的示例。@metatoaster您是对的!为什么会这样?为什么使用sudo运行时不使用相同的路径?可能是因为要解析的python
二进制文件不同(比较which python
vssudo which python
),或者某些特定的路径。或者,由于您在用户帐户上使用Anaconda,您可能希望查看。
myapptest-staging-dark-3 33.5.0-jscherman /opt/myapptest/staging/myapptest $ python3
Python 3.6.10 |Anaconda, Inc.| (default, Jan 7 2020, 21:14:29)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyhocon
>>>
>>> import sys
>>> print(sys.path)
['', '/opt/myapptest/staging', '/opt/myapptest/staging/miniconda3/envs/myapptest/lib/python36.zip', '/opt/myapptest/staging/miniconda3/envs/myapptest/lib/python3.6', '/opt/myapptest/staging/miniconda3/envs/myapptest/lib/python3.6/lib-dynload', '/opt/myapptest/staging/miniconda3/envs/myapptest/lib/python3.6/site-packages']