我想在Ubuntu服务器上运行一个Python脚本,我的目录结构如下:
/home/pythontest
|_ __init__.py
|_ main.py
|_ module_a.py
模块_a. py内部:
def print_a():
print('a')
在网站内部main.py:
from pythontest.module_a import print_a
def execute():
print_a()
execute()
当我在Windows机器上的PyCharm中运行www.example.com时,它会按预期打印a
;在Linux机器上,当我调用python3 main.py
时,会得到一个main.py in PyCharm on my Windows machine, it prints a
as expected, on my Linux machine, when I call python3 main.py
I get a
Traceback (most recent call last):
File "main.py", line 1, in <module>
from pythontest.module_a import print_a
ModuleNotFoundError: No module named 'pythontest'
__init__.py
存在(并且完全是空的),我使用以下命令将目录/home/pythontest添加到PYTHONPATH中:
export PYTHONPATH="${PYTHONPATH}:/home/pythontest"
(使用echo $PYTHONPATH
测试也会产生正确的路径)
补充说明:- 我的计算机上的python3版本是Python 3.6.9
- 我的服务器运行Ubuntu 18.04-所有这些文件都是在Windows上用PyCharm编写的,并通过SSH复制过来
2条答案
按热度按时间oxcyiej71#
您正在导入 pythontest(.module_a),它位于 /home 中。这就是您应该添加到 PYTHONPATH 中的内容:
关于[Python.Docs]的更多详细信息:进口系统。
或者您无法从包中引用包名(考虑 relative imports):
可能还需要检查[SO]: How PyCharm imports differently than system command prompt (Windows) (@CristiFati's answer),看看它为什么可以从 PyCharm 工作。
a8jjtwal2#
您需要将
main.py
中的import
更改为:因为
module_a
是一个存在于导出路径中的模块。