标准的pythonmodule导入之后? 如果我将它推迟到main函数并在它之前执行我的特定模块导入,则会出错(这是非常明显的)。 Python样式指南没有提到它的正确位置。
答案 0 :(得分:8)
它应该在需要它的import
或from
语句之前(正如你所说的那样显而易见)。例如,模块可以从以下开始:
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.insert
(append
)语句。
使用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
。