Python - 从不同项目导入类

时间:2018-06-14 14:16:01

标签: python import python-import

首先关闭所有:对不起 - 我知道已经存在几个与python导入机制有关的问题。然而,经过几个小时的搜索,我仍然无法找到足够的答案。

问题

我的GitLab服务器上托管了两个独立的Python项目。 我们称之为 foo foo-Tester 。 顾名思义, foo-Tester foo -Project的自动测试程序。

foo 具有以下结构:

- foo-Tester
   - __init__.py
   - tester.py

这些类通过相对导入相互导入。

为了这个例子, foo-Tester 项目只包含:

from foo.fooClass import fooClass
myfoo = fooClass()

tester.py 只包含:

- some-folder
   - foo
   - foo-Tester

两个项目在文件系统上彼此相邻:

-m

所以我的问题是:将 fooClass foo 导入 tester.py 的最佳方法/最佳做法是什么?的 FOO-测试 - 项目?

我尝试了什么

使用setup.py

一些答案​​(例如this建议使用 setup.py 。据我了解这种方法,需要安装 foo -Project它被改变的时间 - 我是否正确? 这对我们来说不是一个好的解决方案,因为项目正处于大量发展阶段,每天都会有很多变化。

追加到系统路径

This回答建议将 foo 项目路径添加到系统路径。并使用relative imports not allowed标志

运行脚本

关于这种方法的两个问题:

  • 修改systempaths似乎有点hacky
  • 似乎这并不适用于 foo 项目的相对导入,因为它始终会抛出<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <charset>UTF-8</charset> <Pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg%n</Pattern> </encoder> </appender> <appender name="SAVE-TO-FILE" class="ch.qos.logback.core.FileAppender"> <file>${jboss.server.log.dir}/amset.log</file> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n </Pattern> </layout> </appender> <root level="INFO"> <appender-ref ref="SAVE-TO-FILE" /> <appender-ref ref="STDOUT" /> </root> </configuration> - 错误。

我正在使用Python 3.6。 那么描述问题的最佳方法是什么?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

从这里的帖子: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