我需要向我的 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/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re