<p>我仍然希望有一个神奇的咒语可以添加到我的u pth文件中,上面写着“请将包含我运行的任何脚本的目录放入目录”搜索路径“所以我不必修改我所有的脚本。然而,有可能根本不存在这种神奇的咒语。在</p>
<p>我发现下面的魔法咒语,当添加到Python脚本中时,可以达到预期的效果。而且,与其他解决方案不同的是,这个解决方案可以在cx_Freeze和IDLE的上下文中工作,也可以在基于简单<strong>文件的解决方案不起作用的任何其他上下文中工作。在</p>
<pre><code>import inspect
import os
import sys
# Add script directory to sys.path.
# This is complicated due to the fact that __file__ is not always defined.
def GetScriptFile():
"""Obtains the full path and file name of the Python script."""
if hasattr(GetScriptFile, "file"):
return GetScriptFile.file
ret = ""
try:
# The easy way. Just use __file__.
# Unfortunately, __file__ is not available when cx_freeze is used or in IDLE.
ret = os.path.realpath(__file__)
except NameError:
# The hard way.
if len(sys.argv) > 0 and len(sys.argv[0]) > 0 and os.path.isabs(sys.argv[0]):
ret = os.path.realpath(sys.argv[0])
else:
ret = os.path.realpath(inspect.getfile(GetScriptFile))
if not os.path.exists(ret):
# If cx_freeze is used the value of the ret variable at this point is in
# the following format: {PathToExeFile}\{NameOfPythonSourceFile}. This
# makes it necessary to strip off the file name to get the correct path.
ret = os.path.dirname(ret)
GetScriptFile.file = ret
return GetScriptFile.file
def GetScriptDirectory():
"""Obtains the path to the directory containing the script."""
if hasattr(GetScriptDirectory, "dir"):
return GetScriptDirectory.dir
module_path = GetScriptFile()
GetScriptDirectory.dir = os.path.dirname(module_path)
return GetScriptDirectory.dir
sys.path.insert(0, GetScriptDirectory())
</code></pre>
<p>顺便说一句,如果您希望看到这一点,我已经实现了我的<a href="https://svn.sullivanandkey.com/SnKOpen/Python/pyWhich/trunk/" rel="nofollow noreferrer">Python Which project</a>。在</p>