Python - 从不同项目导入 类
Python - Import Classes from different Projects
首先:抱歉 - 我知道已经存在几个与 python 导入机制有关的问题。然而,经过数小时的搜索,我仍然找不到足够的答案。
问题
我有两个独立的 Python 项目托管在我的 GitLab 服务器上。
我们称它们为 foo 和 foo-Tester。
顾名思义,foo-Tester 是 foo-Project.
的自动测试器。
foo 具有以下结构:
-foo
- __init__.py
- fooClass.py
-bar
- __init__.py
- barClass.py
-foobar
- __init__.py
- foobarClass.py
etc.
类 通过相对导入相互导入。
为了这个例子,foo-Tester 项目只包含:
- foo-Tester
- __init__.py
- tester.py
而 tester.py 仅包含:
from foo.fooClass import fooClass
myfoo = fooClass()
两个项目在文件系统上彼此相邻:
- some-folder
- foo
- foo-Tester
所以我的问题是:什么是最好的 approach/best-practice 将 fooClass 从 foo 导入 tester.py 来自 foo-Tester-Project?
我试过的
使用setup.py
一些答案(例如this建议使用setup.py。据我了解这种方法,需要安装foo-每次更改时都投射-我说得对吗?
这对我们来说不是一个好的解决方案,因为该项目正在大量开发中,每天都有很多变化。
附加到系统路径
This 回答建议将 foo 项目路径添加到系统路径中。 运行 带有 -m
标志的脚本
关于这种方法的两个问题:
- 修改系统路径似乎有点hacky
- 这似乎不适用于 foo 项目的相关导入,因为它总是抛出
relative imports not allowed
-错误。
我正在使用 Python 3.6。
那么,解决上述问题的最佳方法是什么?
提前致谢!
来自此处的线程:Importing modules from parent folder,这是从父(或任何其他)文件夹导入模块的方式。
import os,sys,inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
sys.path.insert(0,parentdir)
import mymodule
首先:抱歉 - 我知道已经存在几个与 python 导入机制有关的问题。然而,经过数小时的搜索,我仍然找不到足够的答案。
问题
我有两个独立的 Python 项目托管在我的 GitLab 服务器上。 我们称它们为 foo 和 foo-Tester。 顾名思义,foo-Tester 是 foo-Project.
的自动测试器。foo 具有以下结构:
-foo
- __init__.py
- fooClass.py
-bar
- __init__.py
- barClass.py
-foobar
- __init__.py
- foobarClass.py
etc.
类 通过相对导入相互导入。
为了这个例子,foo-Tester 项目只包含:
- foo-Tester
- __init__.py
- tester.py
而 tester.py 仅包含:
from foo.fooClass import fooClass
myfoo = fooClass()
两个项目在文件系统上彼此相邻:
- some-folder
- foo
- foo-Tester
所以我的问题是:什么是最好的 approach/best-practice 将 fooClass 从 foo 导入 tester.py 来自 foo-Tester-Project?
我试过的
使用setup.py
一些答案(例如this建议使用setup.py。据我了解这种方法,需要安装foo-每次更改时都投射-我说得对吗? 这对我们来说不是一个好的解决方案,因为该项目正在大量开发中,每天都有很多变化。
附加到系统路径
This 回答建议将 foo 项目路径添加到系统路径中。 运行 带有 -m
标志的脚本
关于这种方法的两个问题:
- 修改系统路径似乎有点hacky
- 这似乎不适用于 foo 项目的相关导入,因为它总是抛出
relative imports not allowed
-错误。
我正在使用 Python 3.6。 那么,解决上述问题的最佳方法是什么?
提前致谢!
来自此处的线程:Importing modules from parent folder,这是从父(或任何其他)文件夹导入模块的方式。
import os,sys,inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
sys.path.insert(0,parentdir)
import mymodule