You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyCharm可正常运行的Python脚本,如何在Shell中指定工作目录执行?

我懂你的困扰——PyCharm帮你悄悄做了不少配置,到了Shell里就得手动还原这些设置才能正常运行。核心问题有两个:一是PyCharm的Add content roots to PYTHONPATH选项自动把项目根目录加到了Python的模块搜索路径,而Shell默认不会这么做,导致你找不到tools模块;二是你需要确保执行脚本时的工作目录是data/。下面给你几个靠谱的解决方案:

解决方案

方法1:临时设置PYTHONPATH(适合临时执行)

这是最直接还原PyCharm配置的方式——手动把项目根目录塞进PYTHONPATH,同时切换到data目录执行脚本。

假设你的项目根目录是/path/to/your/project(就是包含data、main、tools三个文件夹的那个目录),在bash/zsh里可以这么写:

# 先切换到data目录
cd /path/to/your/project/data
# 设置PYTHONPATH为项目根,然后执行脚本
PYTHONPATH=/path/to/your/project python ../main/script.py

如果想一步到位,也可以用一行命令:

PYTHONPATH=/path/to/your/project python -c "import os; os.chdir('/path/to/your/project/data'); exec(open('/path/to/your/project/main/script.py').read())"

方法2:修改脚本自动添加路径(适合长期使用)

如果不想每次执行都手动设置PYTHONPATH,可以在script.py的最开头加一段代码,自动把项目根目录加到Python的搜索路径里。这样不管你在哪里执行脚本,只要脚本的相对位置不变,就能正常导入模块。

修改main/script.py:

import sys
import os

# 获取项目根目录:script.py在main文件夹,往上走一级就是项目根
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
# 把项目根加到搜索路径
sys.path.append(project_root)

# 现在再导入模块就没问题了
from tools import my_strings

# 你的其他代码...

然后执行的时候只需要切换到data目录即可:

cd /path/to/your/project/data
python ../main/script.py

方法3:用Python模块方式运行(更规范)

因为你的main文件夹已经有__init__.py,属于Python包,所以可以用-m参数以模块方式运行,这样Python会自动把当前目录加到PYTHONPATH里(前提是你从项目根执行)。同时我们可以调整工作目录:

# 先切换到项目根目录
cd /path/to/your/project
# 设置工作目录为data,然后运行main.script模块
PYTHONPATH=. python -c "import os; os.chdir('data'); import main.script"

或者更简洁的方式,先切换到data目录,再把项目根(也就是..)加到PYTHONPATH,最后运行模块:

cd /path/to/your/project/data
PYTHONPATH=.. python -m main.script

这种方式更符合Python的模块规范,也能避免直接执行脚本带来的一些路径问题。


内容的提问来源于stack exchange,提问作者Simeon Borko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:06:37