编程语言
首页 > 编程语言> > 将代码从开发计算机移动到目标时管理Python路径

将代码从开发计算机移动到目标时管理Python路径

作者:互联网

我有一个具有此目录结构和以下文件的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时,找不到配置模块.而且,当我运行交互式Python解释器时,sys.path不包含/ home / project_root目录.但是当我回显$PYTHPATH时,确实会出现/ home / project_root.

我在这里做错了什么?

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

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

抱歉浪费您的时间.这个问题应该结束.

解决方法:

在导入setup.configs之前,将其粘贴在测试器脚本中

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

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

编辑:您还可以将.pth文件放在/usr/local/lib/python2.X/site-packages/中..pth文件只是一个文本文件,在python解释器将搜索到的每一行上都有目录路径.因此,只需添加包含以下内容的文件即可:

/home/project_root

标签:pythonpath,path,python
来源: https://codeday.me/bug/20191107/2002979.html