sys.path.append('...')语句应该去哪里?

时间:2010-02-24 15:51:42

标签: python coding-style

标准的pythonmodule导入之后? 如果我将它推迟到main函数并在它之前执行我的特定模块导入,则会出错(这是非常明显的)。 Python样式指南没有提到它的正确位置。

5 个答案:

答案 0 :(得分:8)

它应该在需要它的importfrom语句之前(正如你所说的那样显而易见)。例如,模块可以从以下开始:

import sys
import os
import math
try:
  import foo
except ImportError:
  if 'foopath' in sys.path: raise
  sys.path.append('foopath')
  import foo

请注意,我已将append置于条件状态(导入失败特定模块的路径尚未在sys.path上),以避免sys.path结束的风险数十次出现的字符串foopath,这不会特别有用; - )。

答案 1 :(得分:3)

在PEP 8或其他优秀的Python样式指南中未提及的一个原因是修改sys.path 不是您想要在真实程序中执行的操作;它使您的程序不那么健壮和便携。一个更好的解决方案可能是将您的软件包放在已经位于sys.path的某个位置,或者在系统范围内定义PYTHONPATH以包含您的软件包。

答案 2 :(得分:1)

我经常使用shell脚本来启动我的python应用程序:在我的“启动python脚本”中,在“标准”python模块导入之后放置了sys.path.insertappend)语句。

使用sys.path.insert(0, ...)在路径列表中优先获取“导入”。

答案 3 :(得分:0)

我通常在导入任何内容之前执行此操作。如果您担心模块名称可能与Python stdlib名称冲突,请更改模块名称!

答案 4 :(得分:0)

我认为这是一个品味问题。但大多数人倾向于把它放在import sys :-) 我更喜欢用额外的功能包装它:

def importmod_abs(name):
   sys.path.append() ..

   __import__ ...

   sys.path.pop()

......这种方式sys.path仍然很干净。当然,这仅适用于某些模块结构。无论如何,我会导入所有有效的内容而不首先更改sys.path