gpt4 book ai didi

python - 没有 PYTHONPATH 时的 PYTHONPATH 是什么?

转载 作者:IT王子 更新时间:2023-10-29 00:48:30 25 4
gpt4 key购买 nike

我需要向我的 PYTHONPATH 添加一个新的目录位置,但问题是我在一个干净的新安装的系统 (Linux) 上,其中没有 PYTHONPATH尚未定义。我已经阅读并使用了 PYTHONPATH,我认为我理解得很好,但我不知道当 PYTHONPATH 还不存在时会发生什么。

我不能追加到不存在的东西上,但我希望目前发现的所有重要库仍然有效,所以要小心,我在 Python 中做了 print str(sys.path) 获取所有标准值。然后我为 PYTHONPATH 定义了一个 env 变量,包括我刚找到的所有节点,加上我的新目录。但是哇,很多东西都停止工作了! Python 被新的 env 变量搞得一团糟,我不得不将其删除,此时一切又恢复正常了。由于 PYTHONPATH 错误,系统非常困惑,当在提示符下输入不正确的命令时,系统甚至找不到要显示的错误消息。

我的问题并不简单,比如少了一个冒号,或者在应该使用冒号的时候却使用了分号;我检查了。我的新目录也不会导致问题,因为即使没有新节点,问题仍然存在。那么谁能解释为什么这种方法不起作用?

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

下面我根据要求提供了额外的细节,但是不需要再读下去了,我认为问题已经解决了。 PYTHONPATH 中列出的节点不会覆盖所有“标准”节点,而是成为新的附加条目(我相信是前置的,因此可以控制先出现的节点)的解释是关键。

从头开始,没有定义 PYTHONHOME 或 PYTHONPATH,结果是从 Python 内部产生的:

print ':'.join(sys.path)      
:/usr/lib/python2.7:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/PIL:/usr/lib/python2.7/dist-packages/gst-0.10:/usr/lib/python2.7/dist-packages/gtk-2.0:/usr/lib/python2.7/dist-packages/ubuntu-sso-client

将其用作 PYTHONPATH(即,在调用 Python 之前定义环境变量),即使没有明确使用 Python,也会导致功能非常差的命令提示符。例如:

$> export PYTHONPATH='/usr/lib/python2.7:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/PIL:/usr/lib/python2.7/dist-packages/gst-0.10:/usr/lib/python2.7/dist-packages/gtk-2.0:/usr/lib/python2.7/dist-packages/ubuntu-sso-client'

$> echo $PYTHONPATH
/usr/lib/python2.7:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/PIL:/usr/lib/python2.7/dist-packages/gst-0.10:/usr/lib/python2.7/dist-packages/gtk-2.0:/usr/lib/python2.7/dist-packages/ubuntu-sso-client

$> IntentionalBadCommand
Fatal Python error: Py_Initialize: Unable to get the locale encoding
File "/usr/lib/python2.7/encodings/__init__.py", line 123
raise CodecRegistryError,\
^
SyntaxError: invalid syntax
Aborted

错误在于认为 PYTHONPATH 需要包含所需一切的整个宇宙。是的,我在发布之前做了 RTFM,但我想我错过了开头单词“Augment”的意义。因此,我接受了并非所有内容都需要明确指定的建议——可以只指定所需的额外内容,我尝试了:

$> export PYTHONPATH=/usr/lib/python2.7/dist-packages/postgresql-pkg

$> echo $PYTHONPATH
/usr/lib/python2.7/dist-packages/postgresql-pkg

$> IntentionalBadCommand
IntentionalBadCommand: command not found

虽然我还没有尝试使用上面提到的 postgresql 包,但它似乎可以正常工作。仍然有点神秘,为什么在 PYTHONPATH 前面加上大量不必要的节点会使事情像它那样严重地破坏,特别是因为我从应该是可靠的来源获得条目:sys.path。

但无论如何,它可能已经解决了,非常感谢!

最佳答案

不清楚您的问题可能是什么,但请注意您不需要将 sys.path 的默认值添加到您的 PYTHONPATH 变量。您放入 PYTHONPATH 的目录是要搜索的附加目录;系统默认附加到您的 PYTHONPATH。换句话说,粗略地说:

sys.path = ":".split( os.environ['PYTHONPATH'] ) + sys.path

显示 PYTHONPATH 的确切值和由此产生的错误将有助于我们确定问题。

关于python - 没有 PYTHONPATH 时的 PYTHONPATH 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14529060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com