3

我有一个具有此目录结构和这些文件的 python 项目:

/home/project_root
|---__init__.py
|---setup
       |---__init__.py
       |---configs.py
|---test_code
       |---__init__.py
       |---tester.py

测试器脚本从 setup/configs.py 导入,引用为“setup.configs”。它在我的开发机器上运行良好。

这适用于开发(Linux)计算机。当我将它移动到另一台(Linux)计算机时,我将 PYTHONPATH 设置为

PYTHONPATH = "/home/project_root"

但是当我运行 tester.py 时,它找不到 configs 模块。当我运行交互式 Python 解释器时,sys.path 不包含 /home/project_root 目录。但是当我回显 $PYTHPATH 时,确实会出现 /home/project_root。

我在这里做错了什么?

(我不想依赖 .bashrc 文件来为目标机器设置 PYTHONPATH ——代码用于 Django 应用程序,最终将由 www-data 运行。而且,我知道 apache 配置Django 包含 PYTHONPATH 的规范,但我不想在这里使用它,因为我首先要确保代码在目标机器环境中通过其单元测试。)

CUIOUSER 和 CUIOUSER 这似乎是用户 ID 和权限问题。- 当由普通用户的命令启动时,解释器可以按预期导入模块。- 当由 sudo 启动时(我在这里运行 Ubuntu),解释器无法按预期导入模块。- 我一直在用 sudo 调用测试脚本,因为这些文件归 www-data 所有(b/c 它们将由运行 apache 作为 Django 应用程序的一部分的用户调用)。- 将文件的所有权更改为普通用户的所有权后,测试脚本运行时不会出现导入错误(尽管会进入各种与用户 ID 相关的墙)。

很抱歉浪费您的时间。 这个问题应该关闭。

4

3 回答 3

4

将其粘贴在测试脚本之前import setup.configs

import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.path.pardir))

sys.path是 python 解释器在导入 python 模块时查找的所有目录的列表。这会将包含 setup 模块的父目录添加到该列表的开头,这意味着将首先检查本地目录。如果您在系统范围内安装了模块,这很重要。更多信息在这里:sys doc

编辑:您也可以将 .pth 文件放入/usr/local/lib/python2.X/site-packages/A .pth 文件只是一个文本文件,每行都有一个目录路径,python 解释器将在其中搜索。所以只需在其中添加一个包含这一行的文件:

/home/project_root
于 2009-09-02T17:51:19.700 回答
0

尝试在您的脚本中明确设置您的 python 路径。如果您不想更改它,您可以随时在 tester 的路径中添加“../”之类的内容。也就是说:

sys.path.append("../")
于 2009-09-02T17:51:04.253 回答
0

(我不想依赖 .bashrc 文件来为目标机器设置 PYTHONPATH ——代码用于 Django 应用程序,最终将由 www-data 运行。而且,我知道 apache 配置Django 包含 PYTHONPATH 的规范,但我不想在这里使用它,因为我首先要确保代码在目标机器环境中通过其单元测试。)

如果代码用于 Django 应用程序,是否有理由不在 Django 项目的上下文中对其进行测试?在 Django 项目的上下文中测试它有几个好处:

  1. Djangomanage.py将为您设置 Python 环境。它将适当的项目路径添加到sys.path,并正确设置环境变量DJANGO_SETTINGS_MODULE
  2. Django 的库包含充足的单元测试设施,您可以轻松地扩展该功能以包含您自己的测试设施。在 Django 项目中执行测试就像通过manage.py.
于 2009-09-02T18:39:59.897 回答