首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PYTHONPATH未更新

PYTHONPATH未更新
EN

Unix & Linux用户
提问于 2019-11-26 15:16:35
回答 1查看 722关注 0票数 0

目前,我使用pyenv安装特定的python版本。然后,我使用pipenvpython中的各种项目创建虚拟环境。

目前,我有一个类似于:

代码语言:javascript
复制
foo/
  src/app.py
  src/__init__.py
  tests/unit/test_app.py
  tests/unit/__init_.py

test_app.py中有任意给定数量的测试将app.py导入为:

代码语言:javascript
复制
import src.app

我有两个问题:

  • emacsvimvscode这样的代码编辑器确实抱怨测试中的import子句,将其标记为红色,并且“适度”恼人。
  • 从文本编辑器中,我调用pipenv run pytest来检查测试。它失败了,因为src不是它可以找到的模块。如果我从项目目录中的终端调用相同的命令,就会得到相同的错误。

如果我以python模块的形式调用它,比如pipenv run python -m pytest,它就会工作,因为它将当前目录添加到PYTHONPATH中。如果我从一个pipenv shell启动编辑器,那么测试也能工作。无论我如何启动编辑器,import src.app都被标记为无效。

如果启动编辑器设置PYTHONPATH=$PYTHONPATH:.,那么测试也会正常工作,但是语法检查仍然会出现问题。

对于像emacsvim这样的编辑器,最干净的处理方法是什么?我不想转移到pycharm和类似的工具“自动”解决这个问题。

EN

回答 1

Unix & Linux用户

发布于 2019-11-27 14:23:12

根据pipenv文档,调用pipenv的目录中的任何.env文件都会被加载。

这意味着(例如)当您在使用test_app.py层时在emacs中打开python时,将加载项目的pipenv (与往常一样),但是.env也会自动加载,并且文件的内部依赖关系也会正常工作。

因此,例如,在项目的根上创建具有此内容的.env对我来说是可行的:

代码语言:javascript
复制
PYTHONPATH=$PYTHONPATH:.

现在,您还可以直接从emacs运行单元测试,而不会遇到导入方面的问题。

这是我唯一能让它发挥作用的方法,但这个解决方案让我感觉到了骇人听闻和不雅的感觉。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/554241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档