我想要得到一个在Ubuntu 17中工作的python项目,但我在模块加载时遇到了问题。我已经能够用一个微不足道的例子来分析问题。此示例适用于Windows 10,但不适用于Ubuntu。帮助得到这个工作将不胜感激!无法在父目录中导入模块
这里是我下面的步骤:
首先,我创建在〜/ dev目录下的项目目录名为code_playground。接下来,我创建的virtualenv为这个项目:
~/dev$ which virtualenv
/usr/local/bin/virtualenv
~/dev$ virtualenv -p python3.6 code_playground/
Running virtualenv with interpreter /usr/bin/python3.6
Using base prefix '/usr'
New python executable in /home/user/dev/code_playground/bin/python3.6
Also creating executable in /home/user/dev/code_playground/bin/python
Installing setuptools, pip, wheel...done.
我激活虚拟环境:
~/dev/code_playground$ source ./bin/activate
(code_playground) ~/dev/code_playground$
看来工作:
(code_playground) ~/dev/code_playground$ which python
/home/user/dev/code_playground/bin/python
我创建了一个名为mod_a.py与文件一个简单的功能:
def print_name(name):
print('Your name is {0}'.format(name))
现在我创建一个子目录称为子:
(code playground) ~/dev/code_playground$ mkdir sub
(code playground) ~/dev/code_playground$ cd sub
(code playground) ~/dev/code_playground/sub$
里子,我创建了一个名为mod_b.py这些内容的文件:
from mod_a import print_name
print_name('Joe')
我尝试运行mod_b.py,但我得到的错误:
(code playground) ~/dev/code_playground/sub$ python mod_b.py
Traceback (most recent call last):
File "mod_b.py", line 1, in <module>
from mod_a import print_name
ImportError: No module named mod_a
添加'进口sys'和'print(sys.path)'在脚本开始处......并检查路径。但是,在启动_python_之前,很可能必须'导出PYTHONPATH =〜/ dev/code_playground:$ {PYTHONPATH}'。 – CristiFati
谢谢@CrisiFati。这确实解决了这个问题。我想知道,你有什么洞察力为什么这需要在Linux中,但在Windows中没有它?在virtualenv之后,但在设置PYTHONPATH变量之前,这里是我从mod_b.py得到的sys.path: '['/ home/user/dev/code_playground/sub', '/ home/user/dev/code_playground/lib/python36.zip', '/home/user/dev/code_playground/lib/python3.6', '/home/user/dev/code_playground/lib/python3.6/lib-dynload', '/usr/lib/python3.6', '/home/user/dev/code_playground/lib/python3.6/site-packages']' –
我刚刚注意到,在Windows中,code_playground目录包含在sys中。运行virtualenv之后的路径,而不必设置PYTHONPATH。但是,在Linux中并非如此。我想这就是它在Windows中工作的原因。@CristiFati(或任何其他人),你碰巧有什么洞察力,为什么这是? –