如何在 python 中的打包库中执行动态导入?
How can I perform a dynamic import inside a packaged library in python?
我正在编写一个库,该库将被打包并可通过 Pypi 上的 pip 安装。我的 setup.py
中有几个脚本目标
"console_scripts": [
"mlab=install.make_lab:mlab",
"rlab=install.run_lab:rlab",
"clab=install.clear_lab:clab"
]
这些主要用作补充主库的程序员工具。
mlab
命令在用户项目中创建如下目录结构:
laboratory/
|- lab.py
|- labmain.py
在 labmain.py 我有一个 main()
函数。
import laboratory.lab as lab
def main():
print("I am the main!")
print(lab.name)
我想将此主要方法附加到我的 shell 命令中。
我试过这个:
import os
def rlab():
"""
This shell command is used to run a lab.
"""
lab_dir_path = os.path.join(os.getcwd(), "laboratory")
if not os.path.isdir(lab_dir_path):
print("No lab exists... run the mlab command to make a lab.")
main = __import__("laboratory.labmain")
os.chdir("laboratory")
main.main()
以及使用 from laboratory import labmain
直接导入
我继续得到一个ModuleNotFoundError
。
需要注意的是rlab
函数正在打包,然后通过twine上传到testpypi。然后我将包安装在一个单独的项目中,其中包含在我 运行 mlab
shell 命令之后的实验室结构。一切似乎都很好,直到它被打包。
你快到了。您必须完成函数参数的填写。您可能需要将 0
更改为 1
或 -1
labmain = __import__("laboratory.labmain", globals(), locals(), ['main'], 0)
labmain.main()
此外,请确保 laboratory
目录位于 sys.path
import sys
sys.path.append('z:/path/to/laboratory')
我正在编写一个库,该库将被打包并可通过 Pypi 上的 pip 安装。我的 setup.py
中有几个脚本目标"console_scripts": [
"mlab=install.make_lab:mlab",
"rlab=install.run_lab:rlab",
"clab=install.clear_lab:clab"
]
这些主要用作补充主库的程序员工具。
mlab
命令在用户项目中创建如下目录结构:
laboratory/
|- lab.py
|- labmain.py
在 labmain.py 我有一个 main()
函数。
import laboratory.lab as lab
def main():
print("I am the main!")
print(lab.name)
我想将此主要方法附加到我的 shell 命令中。
我试过这个:
import os
def rlab():
"""
This shell command is used to run a lab.
"""
lab_dir_path = os.path.join(os.getcwd(), "laboratory")
if not os.path.isdir(lab_dir_path):
print("No lab exists... run the mlab command to make a lab.")
main = __import__("laboratory.labmain")
os.chdir("laboratory")
main.main()
以及使用 from laboratory import labmain
我继续得到一个ModuleNotFoundError
。
需要注意的是rlab
函数正在打包,然后通过twine上传到testpypi。然后我将包安装在一个单独的项目中,其中包含在我 运行 mlab
shell 命令之后的实验室结构。一切似乎都很好,直到它被打包。
你快到了。您必须完成函数参数的填写。您可能需要将 0
更改为 1
或 -1
labmain = __import__("laboratory.labmain", globals(), locals(), ['main'], 0)
labmain.main()
此外,请确保 laboratory
目录位于 sys.path
import sys
sys.path.append('z:/path/to/laboratory')