假设我有以下设置:
mkdir test && cd test
virtualenv .venv
source .venv/bin/activate
pip install django
mkdir mod1
touch mod1/__init__.py
echo "a = 1" > mod1/mod2.py
这给了我:
test/.venv
test/mod1/__init__.py
test/mod1/mod2.py
我将如何编写此函数:
def get_module(module_name, root_path, virtualenv_path=None)
为了使它起作用:
project_root_path = "./test"
project_virtualenv_path = "./test/.venv"
get_module("mod1.mod2", project_root_path, project_virtualenv_path)
get_module("django.contrib.auth", project_root_path, project_virtualenv_path)
假设我没有./test/.venv
激活。
我想这样做的原因是因为我正在开发一个 vim 插件,该插件将gf
在导入语句的 python 文件中实现功能。我也在尝试支持 virtualenvs。
编辑:
此外,脚本不应通过添加或附加到 sys.path 来更改当前运行时。这应该通过 vim python 绑定在 vim 内部运行,我认为更改 vim python 运行时不是一个好主意。
get_module
可以返回一个模块对象,也可以返回模块的路径,这就是我基本上要寻找的。