我需要在我的PYTHONPATH
中添加一个新的目录位置,但问题是我在一个干净的,新安装的系统(Linux)上,但尚未定义PYTHONPATH
。我已经读过并使用了PYTHONPATH
,我认为我理解得很清楚,但是当我还没有PYTHONPATH
时我不知道发生了什么。
我无法附加不存在的内容,但我希望当前发现的所有重要库仍然可用,因此要谨慎,从Python中我print str(sys.path)
获取所有标准值。然后我为env
定义了PYTHONPATH
- 变量,包括我刚刚找到的所有节点,以及我的新目录。但哇做了很多东西停止工作! 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之前定义env变量),即使没有显式使用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获得条目。
但无论如何,它可能已经解决了,所以感谢!
答案 0 :(得分:7)
目前尚不清楚您的问题是什么,但请注意,您无需在sys.path
变量中添加默认值PYTHONPATH
。您放入PYTHONPATH
的目录是要搜索的其他目录;系统默认值会附加到您的PYTHONPATH
。换句话说,粗略地说:
sys.path = ":".split( os.environ['PYTHONPATH'] ) + sys.path
显示PYTHONPATH
的确切值以及由此产生的错误将有助于我们确定问题。
答案 1 :(得分:1)
在Unix系统上,它应该转换为/ usr / local / lib / python **,其中**是Python版本......比如2.7等......
你的答案实际上在于PYTHONPATH和PYTHONHOME变量的定义。
http://docs.python.org/2/using/cmdline.html#envvar-PYTHONHOME
默认搜索路径取决于安装,但通常以prefix / lib / pythonversion开头(参见上面的PYTHONHOME)。它总是附加到PYTHONPATH。
我建议你也试试这个
import sys
sys.path.append('Directory you wanna add to the path')
希望这有帮助。