Python:如何导入自定义模块

时间:2017-10-12 14:12:30

标签: python pycharm

我刚刚开始使用Python,并且拥有更多使用C#\ Java的经验。那么让我头疼的是如何将我的Python模块导入另一个自定义模块呢?我已经尝试了几件事:

SO: Python can't find my module

SO: Cant import my own modules

SO: Import Error: no module named when importing my own module

还有几个,但是那些通常建议我使用相对导入(在import语句之前使用适当数量的.)。这对我来说似乎很脆弱,因为据我所知,进口是相对的并且根据执行file.py的位置而解决。

所以这是我在PyCharm中的项目结构:

Project
├───lib
│    ├───__init__.py
│    ├───pages
│    │   ├───__init__.py
│    │   ├───pageA.py
│    │   └───pageB.py
│    └───actions
│        ├───__init__.py
│        ├───actionA.py
│        └───actionB.py
├───tests
│    ├───__init__.py
│    ├───base_test.py
│    └───search_test.py
└───main.py

search_test.py我执行导入模块from lib.actions.actionA import ActionA中,actionA.py我导入模块from lib.pages.pageA import PageA。这是我的main.py

import unittest
from tests.search_test import SearchTest

def create_test_suite():
    test_suite = unittest.TestSuite()
    test_suite.addTest(SearchTest())
    return test_suite


if __name__ == 'main':
    suite = create_test_suite()
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(suite)

当我在PyCharm中运行它时它完美无缺。但现在我需要从控制台运行它:

D:\Projects\Python Projects> python -m unittest project_name.main

我正面对ImportError: no module named 'lib'。有了这个:

D:\Projects\Python Projects\project_name> python main.py
没有任何反应。

我该怎么办?我应该坚持相对模式还是有某种类似Java的包导入?

2 个答案:

答案 0 :(得分:1)

当你面对ImportError时,这意味着Python找不到你的模块。那么,它在哪里寻找模块?

您的PyCharm工作目录可能适合您的项目。但是当你从命令行执行它时,Python会在当前目录和PYTHONPATH env变量中查找模块。此env变量将转换为列表,您可以使用

进行检查
import os
print os.sys.path

确保您的项目在该路径中,如果没有,请将其目录添加到PYTHONPATH env变量中。您可以查看有关说明的this answer

此外,您可以通过命令行更新env变量,如explaiend here

答案 1 :(得分:1)

我认为应该更改为project_name文件夹而不是python -m unittest project_name.main,而是运行python -m unittest main