添加路径 sys.path vs. PEP E402
Add path to sys.path vs. PEP E402
为了导入位于磁盘某处的项目特定模块,可以轻松地将此目录附加到 sys.path:
import sys
sys.path.append(some_module_path)
import some_module
但是,后者的导入现在违反了 PEP E402 ("module level import not at top of file")。至少 spyder 是这样告诉我的。这里的spyder是不是太挑剔了?
在 spyder 中有一个 "project" 的主要思想,我假设环境可以针对这个项目进行调整。但是,我不知道如何修改例如sys.path 取决于 spyder 项目。
如何修改spyder项目中的sys.path?或者是否有解决此问题的通用 python 方法?
我知道这不能回答问题,但它可能是有用的信息。
您可以通过直接指定其路径来导入该模块,而无需使用 sys.path.append
在 Python 3 中,这与
一样简单
import imp
some_module = imp.load_source('some_module', '/path/to/some_module.py')
这里有更多信息:How to import a module given the full path?
您可以将 sys.path
扩展放在单独的模块中,例如_paths.py
.
_paths.py
的内容:
import sys
sys.path.append(some_module_path)
sys.path.append(some_other_module_path)
# ...and so on...
然后在您的主应用程序中:
import sys
import _paths
import some_module
some_module.some_func()
此解决方案将您的 "project configuration" 很好地放在一个地方(便于将来维护),并且至少符合 PEP8(包括 E402)和 pylint 规则。
作为 的替代解决方案,如果发现这对我来说是可行的解决方案,则使用单独的模块。
try:
sys.path.append(Path(__file__).parent.parent)
except IndexError:
pass
如果我只使用 sys.path.append(...)
,我会收到警告,但使用 try-catch 块不会产生警告。
为了导入位于磁盘某处的项目特定模块,可以轻松地将此目录附加到 sys.path:
import sys
sys.path.append(some_module_path)
import some_module
但是,后者的导入现在违反了 PEP E402 ("module level import not at top of file")。至少 spyder 是这样告诉我的。这里的spyder是不是太挑剔了?
在 spyder 中有一个 "project" 的主要思想,我假设环境可以针对这个项目进行调整。但是,我不知道如何修改例如sys.path 取决于 spyder 项目。
如何修改spyder项目中的sys.path?或者是否有解决此问题的通用 python 方法?
我知道这不能回答问题,但它可能是有用的信息。
您可以通过直接指定其路径来导入该模块,而无需使用 sys.path.append
在 Python 3 中,这与
一样简单import imp
some_module = imp.load_source('some_module', '/path/to/some_module.py')
这里有更多信息:How to import a module given the full path?
您可以将 sys.path
扩展放在单独的模块中,例如_paths.py
.
_paths.py
的内容:
import sys
sys.path.append(some_module_path)
sys.path.append(some_other_module_path)
# ...and so on...
然后在您的主应用程序中:
import sys
import _paths
import some_module
some_module.some_func()
此解决方案将您的 "project configuration" 很好地放在一个地方(便于将来维护),并且至少符合 PEP8(包括 E402)和 pylint 规则。
作为
try:
sys.path.append(Path(__file__).parent.parent)
except IndexError:
pass
如果我只使用 sys.path.append(...)
,我会收到警告,但使用 try-catch 块不会产生警告。