【问题标题】:Same code not working in PyCharm but working outside PyCharm相同的代码在 PyCharm 中不工作,但在 PyCharm 之外工作
【发布时间】:2018-11-22 14:50:24
【问题描述】:

我正在尝试在 PyCharm 中运行 google ortools 示例并收到以下错误:

/Users/edamame/project/ortools/simple_program.py
Traceback (most recent call last):
  File "/Users/edamame/project/ortools/simple_program.py", line 3, in <module>
    from ortools.linear_solver import pywraplp
ModuleNotFoundError: No module named 'ortools.linear_solver'

Process finished with exit code 1

但是,如果我在 PyCharm 之外(在相应的项目 venv 下)运行相同的代码,它可以正常工作:

(venv) edamame$ pwd
/Users/edamame/project/ortools/
(venv) edamame$ python simple_program.py 
Solution:
Objective value =  4.0
x =  1.0
y =  1.0

然后我尝试在以下两种情况下打印:

import sys
print('\n'.join(sys.path))

输出:

在 PyCharm 中:

/Users/edamame/project/venv/bin/python
/Users/edamame/project/ortools/so_example.py
/Users/edamame/project/ortools
/Users/edamame/project
/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload
/Users/edamame/project/venv/lib/python3.6/site-packages
/Users/edamame/project/venv/lib/python3.6/site-packages/setuptools-39.1.0-py3.6.egg
/Users/edamame/project/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg

在 PyCharm 之外:

(venv) edamame$ python so_example.py 
/Users/edamame/project/ortools
/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload
/Users/edamame/project/venv/lib/python3.6/site-packages
/Users/edamame/project/venv/lib/python3.6/site-packages/setuptools-39.1.0-py3.6.egg
/Users/edamame/project/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg

它们似乎是一样的...不知道可能是什么问题...

如何使相同的代码在 PyCharm 中工作?

【问题讨论】:

    标签: python-3.x pycharm


    【解决方案1】:

    自定义ortools 包和已安装包之间存在命名空间冲突。 PyCharm 默认将项目根 (/Users/edamame/project) 添加到 PYTHONPATH 会导致问题。

    重命名您的自定义 ortools 包或在 PYCharm 的专用运行配置中禁用 将内容根添加到 PYTHONPATH 选项。

    【讨论】:

      【解决方案2】:

      环境变量 PYTHONPATH 是相关的。在这两种情况下,打印sys.path的值:

      import sys
      print('\n'.join(sys.path))
      

      在 bash 中,您可能会发现输入 venv 和 $ open /Applications/PyCharm.app(或 Mac 上的任何名称)会很有帮助。然后运行的pycharm会从bash继承PYTHONPATH。

      这是另一种方法。在 pycharm 中键入 CMD-,(命令逗号)作为首选项,搜索 Project Structure,右键单击 edamame/project 文件夹,然后选择 alt-S Sources。这会将文件夹添加到 pycharm 中的路径中。同样,使用print() 验证sys.path 包含您期望它包含的内容。

      【讨论】:

      • 我打印这两种情况的 sys.path。它很长,所以我在原始问题中添加了。
      • 我没有意识到您正在遵循developers.google.com/optimization/install/python/mac 的说明。要使它们适应 pycharm,请尝试单击 CMD-comma 并添加与 which python 的 bash 输出匹配的现有环境项目解释器。这是将 conda 或 pip venv 复制到 Pycharm 或 Idea 环境中的常用方法。
      猜你喜欢
      • 1970-01-01
      • 2018-06-01
      • 2015-09-29
      • 2022-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多