<p>为了解释答案,我重新创建了你的项目结构</p>
<pre><code>/projectRoot/
folder1/
somecode.py
utils/
__init__.py
myutils1.py
</code></pre>
<p><strong>somecode.py</strong></p>
<pre><code>from utils.myutils1 import myclass
if __name__ == "__main__":
print(myclass)
</code></pre>
<p><strong>myutils1.py</strong></p>
<pre><code>myclass="tarun"
</code></pre>
<p>从pycharm运行它们没有任何问题,但是从终端运行它们会产生以下错误</p>
<pre><code> File "somecode.py", line XX, in <module>
from utils.myutils1 import myclass
ModuleNotFoundError: No module named 'utils'
</code></pre>
<p>问题是Pycharm很少为你做什么,因为你不知道为什么它不在终端工作。所以在告诉你你需要什么之前,我会告诉你两件事,PyCharm自己做的。</p>
<p><strong>Python控制台</p>
<p>从Pycharm启动Python控制台时,会使用首选项执行一些代码。</p>
<p><a href="https://i.stack.imgur.com/NdHNi.png" rel="noreferrer"><img src="https://i.stack.imgur.com/NdHNi.png" alt="Python Console"/></a></p>
<p>如你所见,有两种选择</p>
<pre><code>[X] Add content roots to PYTHONPATH
[ ] Add source roots to PYTHONPATH
</code></pre>
<p>还有一个开始的脚本。因此,它将项目的根添加到python的路径中。它由两种主要方式控制<code>sys.path</code>和<code>PYTHONPATH</code>环境变量</p>
<p>如果我在Python控制台中运行以下代码</p>
<pre><code>>>> import sys
>>> sys.path
['/Applications/PyCharm.app/Contents/helpers/pydev',
'/Applications/PyCharm.app/Contents/helpers/pydev',
'/Users/tarun.lalwani/.virtualenvs/folderstructure27/lib/python27.zip',
'/Users/tarun.lalwani/.virtualenvs/folderstructure27/lib/python2.7', ....
'/Users/tarun.lalwani/.virtualenvs/folderstructure27/lib/python2.7/site-packages',
'/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27']
</code></pre>
<p>如您所见,<code>'/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27'</code>被添加到Python终端。</p>
<p><strong>Python配置</strong></p>
<p>当您使用Pycharm配置为在代码中运行时,有两个类似的选项。</p>
<p><a href="https://i.stack.imgur.com/JJhDz.png" rel="noreferrer"><img src="https://i.stack.imgur.com/JJhDz.png" alt="Run configurations"/></a></p>
<p>我们可以把<code>somecode.py</code>的代码改成下面的</p>
<pre><code>import os
print (os.environ['PYTHONPATH'])
import sys
print (sys.path)
/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27
['/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27/folder1',
'/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27', ....,
'/Users/tarun.lalwani/.virtualenvs/folderstructure27/lib/python2.7/site-packages']
</code></pre>
<p>从输出中我们可以看到<code>PYTHONPATH</code>设置为当前项目文件夹。</p>
<p><strong>从终端运行</p>
<p>现在让我们用我们所做的修改从终端运行<code>somecode.py</code>。</p>
<pre><code>$ python somecode.py
Traceback (most recent call last):
File "somecode.py", line 2, in <module>
print (os.environ['PYTHONPATH'])
File "/Users/tarun.lalwani/.virtualenvs/folderstructure27/bin/../lib/python2.7/UserDict.py", line 40, in __getitem__
raise KeyError(key)
KeyError: 'PYTHONPATH'
</code></pre>
<p>所以这表示当我们在终端中运行它时没有<code>PYTHONPATH</code>。让我们通过删除<code>print(os.environ['PYTHONPATH'])</code>代码来再次运行它。您将得到以下输出</p>
<pre><code>['/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27/folder1', ...
'/Users/tarun.lalwani/.virtualenvs/folderstructure27/lib/python2.7/site-packages']
Traceback (most recent call last):
File "somecode.py", line 7, in <module>
from utils.myutils1 import myclass
ImportError: No module named utils.myutils1
</code></pre>
<p>如您所见,<code>folder1</code>被添加到<code>sys.path</code>中,因为它是包含<code>somecode.py</code>的文件夹,但根文件夹尚未添加。终端中的修复很简单,就是在PYTHONPATH中设置根目录路径。</p>
<pre><code>PYTHONPATH=`pwd`/.. python somcode.py
</code></pre>
<p>现在代码也可以在终端上运行了。</p>
<p>但是它们的工作方式与Python控制台不同。</p>
<p><strong>重要提示:</strong>
<strong>在远程解释器上使用PyCharm的Python控制台。</strong></p>
<p>如果使用远程解释器选项pycharm运行python控制台将失败。这是因为它将附加本地PC的路径,而不是远程服务器的路径。
为了解决这个问题,必须在本地PC目录和远程服务器路径之间添加一个映射。
<a href="https://i.stack.imgur.com/u80XN.png" rel="noreferrer"><img src="https://i.stack.imgur.com/u80XN.png" alt="pycharmRemoteConfig"/></a>
<a href="https://i.stack.imgur.com/V59VT.png" rel="noreferrer"><img src="https://i.stack.imgur.com/V59VT.png" alt="pycharmRemoteConfig2"/></a></p>