导入在控制台中工作,但不在pyCharm中

卢克·吉芬(Luc Giffon)

我有一个带有很多导入的python项目,例如:

from src.main.fr.some.module import someclass

它运行良好,但我的同事希望导入内容如下:

from fr.some.module import someclass

然后,我更改了自己喜欢PYTHONPATHactivate脚本中的virtualenv

export PYTHONPATH="/home/giffon/Documents/wopmars/src/main:/home/giffon/Documents/wopmars/src/test"

他们更换了所有的src.main.fr.some.modulefr.some.module

然后,我在控制台中尝试了我的代码,输出结果很好(请注意,我PYTHONPATH在代码的开头打印了,并且/home/giffon/Documents/wopmars/src/main看起来像预期的那样)。

(WopMars)giffon@CZC0507G5C-HP-Z400:~/Documents/wopmars/src/main/fr/tagc/wopmars/framework/parsing$ python3 Parser.py 
PRINTING THE PYTHONPATH
/home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/parsing
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/pyparsing-2.1.4-py3.4.egg
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/cycler-0.10.0-py3.4.egg
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/pytz-2016.4-py3.4.egg
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/python_dateutil-2.5.3-py3.4.egg
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/six-1.10.0-py3.4.egg
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/numpy-1.11.0-py3.4-linux-x86_64.egg
/home/giffon/Documents/wopmars/src/main
/home/giffon/Documents/wopmars/src/test
/home/giffon/virtualenvs/WopMars/lib/python3.4
/home/giffon/virtualenvs/WopMars/lib/python3.4/plat-x86_64-linux-gnu
/home/giffon/virtualenvs/WopMars/lib/python3.4/lib-dynload
/usr/lib/python3.4
/usr/lib/python3.4/plat-x86_64-linux-gnu
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages



Reading the definition file... -> done.
Checking whether the file is well formed... -> done.
Building the execution DAG... -> done.
Writing the dot file... -> done.

但是,由于我正在使用pycharm,因此我希望IDE将所做的更改考虑在内。问题来了。

我读到某处我应该通过执行以下操作来修改解释器Python路径:

文件>设置> Projet:wopmars> Projet解释器>“滚轮”>更多...>“显示所选解释器的路径(已选择WopMars解释器)”> +>“浏览到/ home / giffon / Documents / wopmars / src / main”>确定>确定>应用>确定

然后我执行与上面相同的代码:

/home/giffon/virtualenvs/WopMars/bin/python3 /home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/parsing/Parser.py
PRINTING THE PYTHONPATH
/home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/parsing
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/pyparsing-2.1.4-py3.4.egg
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/cycler-0.10.0-py3.4.egg
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/pytz-2016.4-py3.4.egg
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/python_dateutil-2.5.3-py3.4.egg
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/six-1.10.0-py3.4.egg
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/numpy-1.11.0-py3.4-linux-x86_64.egg
/home/giffon/Documents/wopmars/src/test
/home/giffon/Documents/wopmars/src/main
/home/giffon/virtualenvs/WopMars/lib/python3.4
/home/giffon/virtualenvs/WopMars/lib/python3.4/plat-x86_64-linux-gnu
/home/giffon/virtualenvs/WopMars/lib/python3.4/lib-dynload
/usr/lib/python3.4
/usr/lib/python3.4/plat-x86_64-linux-gnu
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages



Traceback (most recent call last):
  File "/home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/parsing/Parser.py", line 12, in <module>
    from fr.tagc.wopmars.framework.management.DAG import DAG
ImportError: No module named 'fr.tagc.wopmars.framework.management.DAG'

您可能已经注意到,/home/giffon/Documents/wopmars/src/main出现的PYTHONPATH含义是已经考虑了pycharm解释器路径的配置。因此,解释器知道在哪里可以找到模块,但是看不到fr...解决此问题的任何想法?

解决此问题可能并不有趣,但是引发错误的代码是:

print("PRINTING THE PYTHONPATH")                          
for p in sys.path:                                        
    print(p)                                              
print("\n\n")                                             


from fr.tagc.wopmars.framework.management.DAG import DAG  

注:改变PYTHONPATH.profile.bashrc给了我同样的结果

注意2:如果我不导出PYTHONPATH,则控制台会给我与pycharm相同的错误

卢克·吉芬(Luc Giffon)

感谢Zulan的评论,我解决了我的问题。

TLDR:

src/main/目录src/test/放在pycharm解释器中的一个目录PYTHONPATH


在pycharm和控制台中对Python解释器使用-v选项,我得到以下输出:

控制台输出:

# /home/giffon/Documents/wopmars/src/main/fr/__pycache__/__init__.cpython-34.pyc matches /home/giffon/Documents/wopmars/src/main/fr/__init__.py
# code object from '/home/giffon/Documents/wopmars/src/main/fr/__pycache__/__init__.cpython-34.pyc'
import 'fr' # <_frozen_importlib.SourceFileLoader object at 0x7f384ce4b160>
# /home/giffon/Documents/wopmars/src/main/fr/tagc/__pycache__/__init__.cpython-34.pyc matches /home/giffon/Documents/wopmars/src/main/fr/tagc/__init__.py
# code object from '/home/giffon/Documents/wopmars/src/main/fr/tagc/__pycache__/__init__.cpython-34.pyc'
import 'fr.tagc' # <_frozen_importlib.SourceFileLoader object at 0x7f384ce4b358>
# /home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/__pycache__/__init__.cpython-34.pyc matches /home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/__init__.py
# code object from '/home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/__pycache__/__init__.cpython-34.pyc'
import 'fr.tagc.wopmars' # <_frozen_importlib.SourceFileLoader object at 0x7f384ce4b400>
# /home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/__pycache__/__init__.cpython-34.pyc matches /home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/__init__.py
# code object from '/home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/__pycache__/__init__.cpython-34.pyc'
import 'fr.tagc.wopmars.framework' # <_frozen_importlib.SourceFileLoader object at 0x7f384ce4b4a8>
# /home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/management/__pycache__/__init__.cpython-34.pyc matches /home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/management/__init__.py
# code object from '/home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/management/__pycache__/__init__.cpython-34.pyc'
import 'fr.tagc.wopmars.framework.management' # <_frozen_importlib.SourceFileLoader object at 0x7f384ce4b550>

pycharm输出:

# /home/giffon/Documents/wopmars/src/test/fr/tagc/__pycache__/__init__.cpython-34.pyc matches /home/giffon/Documents/wopmars/src/test/fr/tagc/__init__.py
# code object from '/home/giffon/Documents/wopmars/src/test/fr/tagc/__pycache__/__init__.cpython-34.pyc'
import 'fr.tagc' # <_frozen_importlib.SourceFileLoader object at 0x7fb1532422e8>
# /home/giffon/Documents/wopmars/src/test/fr/tagc/wopmars/__pycache__/__init__.cpython-34.pyc matches /home/giffon/Documents/wopmars/src/test/fr/tagc/wopmars/__init__.py
# code object from '/home/giffon/Documents/wopmars/src/test/fr/tagc/wopmars/__pycache__/__init__.cpython-34.pyc'
import 'fr.tagc.wopmars' # <_frozen_importlib.SourceFileLoader object at 0x7fb153242390>
# /home/giffon/Documents/wopmars/src/test/fr/tagc/wopmars/framework/__pycache__/__init__.cpython-34.pyc matches /home/giffon/Documents/wopmars/src/test/fr/tagc/wopmars/framework/__init__.py
# code object from '/home/giffon/Documents/wopmars/src/test/fr/tagc/wopmars/framework/__pycache__/__init__.cpython-34.pyc'
import 'fr.tagc.wopmars.framework' # <_frozen_importlib.SourceFileLoader object at 0x7fb153242438>
# /home/giffon/Documents/wopmars/src/test/fr/tagc/wopmars/framework/management/__pycache__/__init__.cpython-34.pyc matches /home/giffon/Documents/wopmars/src/test/fr/tagc/wopmars/framework/management/__init__.py
# code object from '/home/giffon/Documents/wopmars/src/test/fr/tagc/wopmars/framework/management/__pycache__/__init__.cpython-34.pyc'
import 'fr.tagc.wopmars.framework.management' # <_frozen_importlib.SourceFileLoader object at 0x7fb1532424e0>
Traceback (most recent call last):
  File "/home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/parsing/Parser.py", line 12, in <module>
    from fr.tagc.wopmars.framework.management.DAG import DAG
  File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
  File "<frozen importlib._bootstrap>", line 2224, in _find_and_load_unlocked
ImportError: No module named 'fr.tagc.wopmars.framework.management.DAG'

您可能已经注意到这两个输出之间的细微差别:在中进行控制台解释器搜索,wopmars/src/main/在中进行pycharm解释器搜索wopmars/src/test/

实际上,如果我仔细看一下印刷品PYTHONPATH,它们是不一样的:

  • 在控制台中,/home/giffon/Documents/wopmars/src/main出现/home/giffon/Documents/wopmars/src/test在列表的前面sys.path
  • 在皮查姆(Pycharm),情况恰恰相反

然后,我把/home/giffon/Documents/wopmars/src/test /home/giffon/Documents/wopmars/src/main在pycharm它完美地工作。我认为python解释器开始在其中查找模块名称的第一部分,src/test/然后他没有找到结尾并在不查找其他路径的情况下引发错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

xmlhttprequests 在控制台中工作,但不在脚本中

JQuery:脚本在控制台中工作,但不在附件中工作

Winston在控制台中登录,但不在日志文件中

数据显示在控制台中但不在Vue中

Rmarkdown 中的`import pandas`:在控制台中工作,但不编织

%in%在控制台工作,但不在脚本中工作

聚合在控制台中工作,但不在节点上工作?

单击从控制台工作但不在代码中

来自实时 Firebase 的数据显示在控制台中,但不在 html 页面中

Neo4j MERGE在代码中创建重复项,但不在控制台中创建

Peewee 在 python 控制台中检索数据但不在应用程序中

React useState 确实在开发工具中更新,但不在控制台中

在控制台中打印,但不在页面上打印?

日期不在 Typescript 中工作,但在浏览器控制台中工作

SharePoint代码可在控制台中工作,但不能在Web API中工作

代码可在浏览器控制台中工作,但不能在tampermonkey中工作

Python在脚本中导入文件的问题(不在控制台中)

js在控制台中工作,但不是从功能

cheerio选择器(Node.js)在控制台中运行,但不在我的脚本中运行

Jquery 在控制台上工作但不在页面上

React Native Push Notification 显示在 XCode 控制台中,但不在设备上

控制台中的角度 8 阵列更改但不在视图中

Hibernate 在控制台中工作,而不是在电源菜单中

在控制台中执行选择的 ModuleNotFoundError (PyCharm)

在 pycharm 控制台中更新文本

Pycharm 在不同的控制台中运行

FireBug可以工作,但不会在控制台中产生结果

取消静音视频 JS 脚本在控制台中工作但不是页面

脚本在 Powershell 控制台上工作但不在 Powershell ISE 上工作