pycharm 我如何设置一个一致的工作目录,当运行当前文件?

rta7y2nd  于 2023-03-12  发布在  PyCharm
关注(0)|答案(3)|浏览(558)

当运行当前文件时(通过PyCharm的“run current file”动作),它将工作目录设置为/Users/xxx/Documents/myproject/xy文件夹(文件路径为/Users/xxx/Documents/myproject/xy/myfile.py)。
然而,我希望工作目录是/Users/xxx/Documents/myproject/文件夹,我不明白为什么它自动使用python文件所在的目录,而不是我实际指定的工作目录。
主要问题来自Python文件中的这行代码:

df = pandas.read_csv("output/file.csv")

有一个/Users/xxx/Documents/myproject/output/file.csv
但是它无法打开它,因为它在“xy”文件夹中查找,而不是“output/file.csv”的“myproject”文件夹。我当然可以做类似pandas.read_csv("../output/file.csv")的操作
但每次我重构代码并将文件移到不同的文件夹时,它就会被破坏。难道不可能在pycharm中有一个一致的工作目录,无论我在项目中运行什么文件?
另外:由于某种原因,此导入:从lib.mylibrary import somefunction工作,即使该文件保存在/Users/xxx/Documents/myproject/lib/mylibrary.py
所以对于导入,它似乎是从工作目录搜索的。然而,对于任何其他东西,这并不发生。为什么?导入和其他代码有不同的工作目录吗?

gcuhipw9

gcuhipw91#

当创建一个新的项目时,PyCharm创建一个虚拟环境。pip安装都只安装在这个本地项目文件夹中,工作文件夹被设置为根项目文件夹。
如果你打开文件夹而不创建项目,我可以想象默认为python的默认位置,根文件夹可以设置到错误的位置。
1.我建议使用虚拟环境(从设置-〉项目-〉项目解释器设置)
1.您可以在PyCharm的右上角设置工作目录、参数和执行的python脚本-〉通常使用python文件名-〉然后编辑配置

vcirk6k6

vcirk6k62#

我发现依赖隐式工作目录在脚本中是不好的做法,除非它专门用于运行各种工作目录。
相反,我设置了相对于脚本本身的路径:

from pathlib import Path

base_dir = Path(__file__).parent

df = pandas.read_csv(base_dir / "output/file.csv")

无论您从何处运行文件,这都更加一致。
另一种选择是简单地将文件路径作为脚本的CLI参数,并使用类似于docopt的方法读取它,这样就不必处理工作目录。
还有一种可能性是从STDIN(sys.stdin)读取,而不是从文件读取:

cat output/file.csv | python my_script.py

我认为Pandas支持这一点,但只有当你只阅读一个文件时,它才起作用。
所以对于导入,它似乎是从工作目录搜索的。然而,对于任何其他东西,这并不发生。为什么?导入和其他代码有不同的工作目录吗?
导入与工作目录不同。当您从shell运行脚本时,可能会出现如下内容(假设您将shell配置为显示当前工作目录):

/home/ookami/Documents $> python ~/code/my_script.py

在本例中,/home/ookami/Documents是当前目录,也称为工作目录,也称为PWD环境变量(由shell管理)。~/code/my_script.py也称为/home/ookami/code/my_script.py是脚本的绝对路径。如果脚本尝试从output/file.csv读取,则实际上是$PWD/output/file.csv也称为/home/ookami/Documents/output/file.csv
这当然是一种古老的Unix机制,允许您在不同的位置有多个output/file.csv,并允许您根据shell所在的目录来确定将读取哪个。当您在shell上使用像Pycharm这样的GUI抽象时,它开始失去意义并导致混乱。我建议您不要使用Pycharm的“运行”特性,并且习惯于从命令行运行Python脚本,从长远来看,这将为您节省很多麻烦。当您使用它时,请阅读“Unix哲学”,它将启发您并教您编写更优雅的程序。
另一方面,导入并不依赖于你运行脚本的位置。它们通常是相对于脚本本身(__file__)或绝对路径(你的系统库)。它们来自PYTHONPATH,Python文档对此有解释。

ie3xauqp

ie3xauqp3#

右键单击myfile.py,然后单击Modify Run Configuration...
Working directory:更改为C:\Users\xxx\Documents\myproject,然后单击OK
现在试着运行它。

相关问题