将代码从开发计算机移动到目标时管理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