在Ubuntu 18服务器上部署Python项目

0 投票
1 回答
22 浏览
提问于 2025-04-12 15:01

我写了一个简单的脚本(tg 机器人),但是在把它上传到我的 Ubuntu 服务器上后(使用的是 Python 3.9.13,pip freeze 安装了需要的库),出现了一些路径问题(我猜是这样)。

root@tele:/# python3 /root/mybot/workDir/coreFiles/coreBot.py
Traceback (most recent call last):
  File "/root/mybot/workDir/coreFiles/coreBot.py", line 6, in <module>
    from workDir.sets import config
ModuleNotFoundError: No module named 'workDir'

在我的核心文件里,有一些导入的内容:

from workDir.sets import config
from workDir.methods.states.comdsHandler import getHandler

这是我的项目结构:

workDir/
    ├─coreFiles/
    │ └─coreBot.py
    ├─methods/
    │ ├─states/
    │ │ ├─actionStates.py
    │ │ └─comdsHandler.py
    │ └─utils/
    │   ├─connectionDB.py
    │   ├─loggingUtil.py
    │   ├─registerUserInDB.py
    │   └─strParser.py
    └─sets/
      ├─categories.py
      └─config.py

请帮我找个比把所有内容放在一个 py 文件里更好的解决方案 :)

1 个回答

1

这里有几个问题。你把文件夹当成Python文件来处理,可能会对文件夹的结构感到困惑。为了更清楚:

import X from Y --> 这条命令会从文件Y.py中返回X(X可以是一个类、一个函数或者其他东西)。

所以,在你的情况下,你只需要:

import workDir.sets.config

因为你并没有从config.py中加载任何特定的内容,所以你只需要整个文件。

另外,导入的结构很大程度上取决于你运行脚本的工作目录。你运行的脚本是在workDir里面吗?如果是的话,你就不需要写import workDir.sets.config,直接写import .sets.config就可以了。

如果你不知道当前的目录,可以运行print(os.getcwd())来查看。

编辑:我注意到你是从/workDir/coreFiles/coreBot.py加载的,这样对吗?如果是的话,你需要从上级目录加载文件:

import ..sets.config

撰写回答