【问题标题】:Importing from parallel directories with python 2.7使用 python 2.7 从并行目录导入
【发布时间】:2015-09-23 18:12:21
【问题描述】:

我最近开始从事一个项目,并负责实施一些新功能以及对这些功能进行单元测试。我一直在尝试将模块导入单元测试文件,但是当我运行它时遇到 ImportError: No module named Developing.algorithms 当我尝试导入 test_algorithms.py 时

我尝试过同时导入

from Developing import algorithms as algo

import Developing.algorithms as algo

我的结构类似于我做的这个测试项目:

Testing/
    __init__.py
    Developing/
        __init__.py
        algorithms.py
    Master (Stable)/
    Tests/
        __init__.py
        test_algorithms.py

我遇到了:

ImportError: No module named Developing.algorithms

或者当我将导入更改为:从开发导入算法

ImportError: No module named Developing

我已经阅读了许多类似的问题,并且从这些问题中我学到了将 init.py 文件包含到每个包含我要导入的文件的目录中。根据 PyCharm,我目前没有任何错误,但是当我从终端运行它时,我遇到了那个导入错误。我也不想修改系统/python路径,因为我读到使用该项目的每个人都必须如此。那么如何在不更改路径的情况下从并行目录导入呢?

【问题讨论】:

  • 你是从哪里导入的?导入Developing.algorithms 的脚本在目录结构中的什么位置?
  • 我正在尝试导入 test_algorithms.py
  • 您的import 语句是什么样的? import Developing.algorithmsimport Testing.Developing.algorithms 之类的东西?有时你必须写下整个路径名。
  • 我都试过了:“从开发导入算法作为算法”和“导入 Developing.algorithms 作为算法”。当我使用 Testing.Developing.algorthms 时,尽管有 init 文件,但我在 PyCharm 中遇到了“未解决的引用”

标签: python python-2.7 python-import python-unittest


【解决方案1】:

您需要将目录Testing 添加到您的PYTHONPATH 环境变量中,以便能够直接导入Developing.algorithms(或Testing 上方的目录才能导入Testing.Developing.algorithms)。

在 windows 中,您可以将 PYTHONPATH 变量设置为 -

set PYTHONPATH=\path\to\Testing\;%PYTHONPATH%

在 Bash 中,你可以试试 -

export PYTHONPATH=/path/to/testing/:$PYTHONPATH

以编程方式(来自 python),您可以在尝试导入 Developing.algorithms 之前执行以下操作 -

import sys
sys.path.append('/path/to/Testing/')
from Developing import algorithms # or how ever you want to import.

此外,您不需要执行以上所有操作,任何人都可以执行 - 设置 PYTHONPATH 环境变量,或使用 sys.path

【讨论】:

  • 这似乎可行,但是;每台计算机的路径不会不同吗?我会考虑使用 os 来解决这个问题。
  • 设置路径的正确解决方案是始终使用 virtualenv。
  • @user3591079 你会在多台计算机上测试这个吗?如果是这样,我认为您应该考虑重组目录结构,以便可以在不设置任何内容的情况下导入文件 PYTHONPATH 。或者你可以使用sys.path.appendTesting 文件夹的相对路径。
  • @AnandSKumar 是的,这将在多台计算机上进行测试,这就是为什么我对使用 PYTHONPATH 方法犹豫不决。我将使用相对路径查看 sys.path.append。我也是这个项目的新成员,所以我很犹豫是否建议重组项目。在这种情况下,是否建议将测试文件夹放在包含要测试的文件的文件夹中?例如,/Developing/Tests?
  • @user3591079 我会说建议将测试脚本与他们将要测试的脚本并排(在同一个文件夹中)(我希望是Developing)跨度>
猜你喜欢
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 2016-01-25
  • 1970-01-01
  • 2016-12-27
相关资源
最近更新 更多