无法在父目录中导入模块

时间:2017-09-01 00:25:20

标签: python ubuntu virtualenv python-3.6

我正在尝试在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))

现在我创建一个名为sub的子目录:

(code playground) ~/dev/code_playground$ mkdir sub
(code playground) ~/dev/code_playground$ cd sub
(code playground) ~/dev/code_playground/sub$ 

在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

1 个答案:

答案 0 :(得分:1)

Python解释器必须知道在哪里找到module_a.py。导入模块module_a.py的文件位于module_a.py存在的目录的子目录中,&#34;这不是一个有用的东西&#34;。你可以尝试一些事情:

1-按照@CristiFati的建议,将您的mod_a.py路径(在脚本运行之前)添加到Python的路径中。

2-将您的mod_a.py路径(使用Python代码)添加到Python的路径中,执行类似(令人厌恶的路径):

import
sys.path.insert(0, '/home/user/dev/code_playground/bin/python')
from mod_a import print_name
...

3-评估相对进口(6.4.2. Intra-package References