运行交互式会话时,PyCharm会将os.getcwd()
视为我项目的目录。但是,当我从命令行运行脚本时,PyCharm认为os.getcwd()
是脚本的目录。
这有一个很好的解决方法吗?这是我尝试过但不喜欢的:
转到“运行/编辑配置”并手动更改工作目录。我不喜欢这个解决方案,因为我必须为我运行的每个脚本都这样做。
在我的代码中有一行"修复"用于交互式会话的路径,并在从命令行运行之前将其注释掉。这有效,但感觉不对。
有没有办法做到这一点,还是它应该是这样的?也许我不应该尝试在我的项目中运行随机脚本?
非常感谢任何见解。
澄清:
python path_to_myscript/my_script.py
(我实际按下PyCharm上的Run按钮,但我认为它是相同的。)其他可能值得一提的事实:
os.path.join()
)从当前工作目录(项目目录...\\project_name
)到模块的目录...\\project_name\\Graphs
,其中该文件位于。但是,当我通过命令行运行整个脚本时,读取.txt文件的命令会引发错误,抱怨没有找到文件。通过查看未找到的文件的名称,我看到完整的文件名是这样的:
...\\project_name\\Graphs\\Graphs\\graph1.txt
看来这次当前的工作目录是...\\project_name\\Graphs\\
,我的os.path.join()
命令实际上破坏了它。答案 0 :(得分:1)
我在python脚本中使用了各种方法。
使用
将工作目录设置为代码的第一步os.chdir(some_existing_path)
这意味着您应该引用所有其他路径,因为您需要设置路径。您只需要确保它可以在任何位置工作,并且您可以在IDE中专门工作。显然,另一个os.chdir()
将更改工作目录,os.getcwd()
将返回新的工作目录
使用
将工作目录设置为__file__
os.chdir(os.path.dirname(__file__))
这实际上是我最常用的,因为它非常可靠,然后我引用所有其他路径或文件操作。或者您可以在代码中简单地称为os.path.dirname(__file__)
而不实际更改工作目录
使用
获取工作目录os.getcwd()
并引用所有路径和文件操作,知道它将根据脚本的启动方式而改变。 注意:不要假设这会返回脚本的位置,它会返回shell的工作目录!!
[基于新信息的编辑]
通过"交互式会话"我的意思是能够运行每一行 单独在Python / IPython控制台
通过在Python控制台中逐行交互运行,__file__
未定义,毕竟:您不是执行文件。因此,您无法使用os.path.dirname(__file__)
,您必须使用类似os.chdir(some_known_existing_dir)
的内容来引用路径。作为程序员,您需要非常了解工作目录并对此进行更改,您的代码应该反映出来。
通过"从命令行运行"我的意思是创建一个脚本my_script.py 并运行python path_to_myscript / my_script.py(我实际按下了 在PyCharm上运行按钮,但我认为它是相同的。)
这将从命令行执行.py
以及在IDE中运行,将填充__file__
,因此您可以使用os.path.dirname(__file__)
HTH
答案 1 :(得分:1)
我故意在这篇文章中添加另一个答案,关于以下内容:
其他可能值得一提的事实:
我创建了一个PyCharm项目。这包含(除其他外) 包Graphs,包含模块Graph和一些.txt 文件。当我在我的Graph模块中执行某些操作时(例如,阅读图表 从一个文件),我喜欢测试事情按预期工作。我这样做 通过运行选择的行(交互式)。要读取.txt文件, 我必须从当前工作目录(使用os.path.join()) (项目目录,... \ project_name)到模块的目录 ... \ project_name \ Graphs,文件所在的位置。但是,当我 通过命令行运行整个脚本,命令读取 .txt文件引发错误,抱怨没有找到文件。通过 看到未找到的文件的名称,我看到了 完整的文件名是这样的: ... \ project_name \ Graphs \ Graphs \ graph1.txt似乎这次 当前的工作目录是... \ project_name \ Graphs \和我的 os.path.join()命令实际上破坏了它。
我坚信,如果python脚本从任何文件中获取输入,那么脚本的作者需要在脚本中为此提供服务。
我的意思是你,因为无论你的脚本如何执行,作者都需要确保你知道以下内容:
这两个你无法控制何时将脚本交给他人,或者在其他人机器上运行它。工作目录取决于脚本的启动方式。看来你在Windows上运行,所以这是一个例子:
C:\> c:\python\python your_script.py
如果C:\
位于your_script.py
C:\
C:\some_dir\another_dir\> c:\python\python.exe c:\your_script_dir\your_script.py
工作目录现在是C:\some_dir\another_dir
如果将SYSTEM PATH
变量设置为your_script.py
即使脚本的用户将其放置在其计算机上的不同位置,您也需要确保脚本正常工作。有些人(我不知道为什么)倾向于把所有东西放在桌面上。您需要确保脚本可以处理此问题,包括路径名中的任何空格。
此外,如果您的脚本从文件中获取输入,那么您作为作者需要确保您可以应对工作目录中的更改以及脚本目录的更改。您可以考虑以下几点:
C:\python_input\
ConfigParser
,您可以在很多posts上的stackoverflow上搜索os.path.dirname(__file__)
)最终,这一切都在您的掌控之中,您需要进行编码以确保其正常运行。
HTH, 埃德。