我刚刚开始使用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的包导入?
答案 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