当前位置: 首页 > 知识库问答 >
问题:

没有蟒蛇时,蟒蛇是什么?

长孙修远
2023-03-14

我需要在我的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之前定义一个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

错误的想法是认为蟒蛇需要包含整个宇宙所需的一切。是的,我在发布之前做过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.

但无论如何,它可能已经解决了,所以谢谢!

共有2个答案

狄鸿禧
2023-03-14

在Unix系统上,它应该转换为/usr/local/lib/python**,其中**是python版本…如2.7等等。。。

答案实际上在于PYTHONPATH和PYTHONHOME变量的定义。

默认搜索路径依赖于安装,但通常以前缀/lib/pythonversion开头(参见上面的PYTHONHOME)。它总是附加到PYTHONPATH。

我建议你也试试这个

import sys    
sys.path.append('Directory you wanna add to the path')

希望这有帮助。

江展
2023-03-14

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

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

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

 类似资料:
  • 我正在运行Ubuntu 18.04。 我使用mysql连接器-python连接Python到MySQL。 我使用的是Python 3.6.7,并且已经安装了mysql连接器-python。 我已经安装了mysql连接器-python-py3_8.0.13-1ubuntu18.10_all.deb. 在运行Python脚本时,mysql。连接器模块似乎加载正确,但脚本在碰到光标时失败。next()具

  • 假设我有一些资源,我想在用python编写的aws lambda中的不同请求之间共享。我应该如何实现这一点? 是否有“启动后”挂钩,或者我应该在第一次调用时惰性地创建资源?“延迟初始化”的缺点是,它意味着一些请求会随机变慢,因为您选择了一个消费者来承担启动成本。 此外…这些资源会在lambda可执行文件被“冻结”后幸存下来吗? 本页https://docs.aws.amazon.com/lambd

  • 我想定义一个返回树节点值列表的函数。列表按级别顺序排列(从上到下,从左到右),如果缺少孩子,则在其位置插入“无”。 这是二叉树实现

  • 我正在尝试使用本教程从一个使用selenium and beautiful soup的站点提取房地产列表信息:https://medium.com/@ben.sturm/scraping-house-listing-data-using-Selenium-and-Beautiful Soup-1CBB94BA9492 目的是在找到“下一页”按钮之前收集第一页的所有href链接,导航到下一页并收集该

  • 我是一名程序员,但我之前没有使用Python或其任何库的经验,甚至没有OCR/ALPR的整体经验。我有一个脚本,我做的(基本上复制和粘贴其他脚本在整个网络上),我假装用来识别车牌。但事实是我的代码现在非常糟糕。它可以很好地识别图像中的文本,但它很难捕捉车牌。我很少能用它拿到牌照。 因此,我需要一些帮助,说明我应该如何更改代码以使其更好。 在我的代码中,我只需选择一个图像,将其转换为二进制和BW,然

  • 如何在matplotlib中绘制多个条形图,当我多次尝试调用bar函数时,它们重叠,如下图所示,最高值红色只能看到。如何在x轴上绘制带有日期的多个条形图? 到目前为止,我尝试了这个: 我得到了这个: 结果应该是这样的,但是日期在x轴上,横条彼此相邻: