【发布时间】:2016-03-02 21:47:07
【问题描述】:
我已经在这个问题上待了一天,但没有找到解决方案。我的 python 项目非常深入,一些模块必须独立运行(没有 -m 标志,没有相对导入)。出于这个原因,我们决定将根文件夹添加到 PYTHONPATH。我正在运行 OSX 10.11.3。直到昨天,一切都进行得很顺利。我可以从终端运行独立模块,在 Python 2.7 和 3.5 中都没有问题。昨天,在不修改我的 PYTHONPATH 或任何其他环境设置的情况下,从终端运行这些独立模块中的任何一个现在都会在 Python 2 和 3 中出现导入错误。
这是我的工作树:
/Users/sintrafico/Documents/code/central_maestra
- reports_server.py
- api_server.py
- sintrafico
- sql
- SQLConnection
- api
- incident
- csv (not package)
- independent_module
- tests
我昨天运行测试时覆盖率没有问题,但现在不行了。
Python 2 python csv/independent_module.py 给出错误:
Traceback (most recent call last):
File "csv/independent_module.py", line 13, in <module>
from sintrafico.sql import SQLConnection
ImportError: No module named sintrafico.sql
Python 3 python3 csv/independent_module.py 给出错误:
Traceback (most recent call last):
File "csv/create_bemobile_csv.py", line 13, in <module>
from sintrafico.sql import SQLConnection
ImportError: No module named 'sintrafico'
昨天在事件文件夹中,这个命令运行良好:coverage run -m unittest discover。现在所有测试都失败了,因为ImportError: No module named 'reports_server'。
自从昨天开始发生这种情况以来,我一直在搞乱我的 PYTHONPATH。我将其留空,但它不起作用(如预期的那样),我现在已经通过多种方式添加了路径:
export PYTHONPATH=“${PYTHONPATH}:/Users/sintrafico/Documents/code/central_maestra"export PYTHONPATH=“/Users/sintrafico/Documents/code/central_maestra:${PYTHONPATH}"export PYTHONPATH=“${PYTHONPATH}:/Users/sintrafico/Documents/code/central_maestra/"export PYTHONPATH=“/Users/sintrafico/Documents/code/central_maestra:${PYTHONPATH}"
并且在不附加 PYTHONPATH 的情况下设置它,因为它一开始是空的。我重新启动了我的电脑几次都没有成功。另请注意,我有一个 .bash_profile 和 .bashrc 包含以下内容:
# Setting PATH for Python 3.5
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.5/bin:${PATH}"
export PATH
PYTHONPATH=“/Users/sintrafico/Documents/code/central_maestra:${PYTHONPATH}“
export PYTHONPATH
最后,最让我烦恼的是,如果我在 PyCharm 中运行测试,它们都运行并通过,我根本不会收到任何导入错误。
【问题讨论】:
-
您是否尝试过设置不带引号和大括号的路径?可能是您将 python 路径设置为路径的字符串表示形式。
-
我没有,我马上试试。谢谢
-
@JaseRieger 非常感谢!就是这样。 Coverage 和 Python 可以从终端再次运行测试,我可以运行独立的模块。我不知道为什么会这样,因为我大约一周没有修改 .bash 文件,所以我认为这不是问题。
-
我会回答的
标签: python pythonpath