运行的问题
我有一个基本文件结构如下所示:更改Python脚本的当前工作目录,并与-m中的Apache2
parent_dir/
foo/
Models.py
bar/
NeedsModels.py
baz/
AlsoNeedsModels.py
在我的本地机器上,我已经运行NeedsModels.py
与python3 -m
:
python3 -m bar.NeedsModels
...而我的当前工作目录是parent_dir
。
这工作如期进行,我可以通过执行使用Models.py
来自NeedsModels.py
和AlsoNeedsModels.py
:
import foo.Models
然而,这并不对本Apache2
服务器我部署到有2个原因上工作:
当前工作目录访问
NeedsModels.py
不是parent_dir
。该脚本未与
-m
一起运行。
在NeedsModels.py
使用标准的家当,是这样的:
#!/usr/bin/python3 -m
...错误(Relative module names not supported
),因为它是大致相当于:
python3 -m ./NeedsModels
我(的hackish)解决方案
我找到了一个解决方案,把这个shebang放在顶部NeedsModels.py
(从这question启发):
#!/bin/sh
""":"
cd ../ && exec python3 -m bar.NeedsModels
"""
显然,这是一种可怕的黑客攻击。
我读过关于CGI脚本的Apache2
docs。根据我的理解,没有提及更改脚本的当前工作目录。我也搜索了网页,并且一直无法找到任何相关信息。
期望中的答案
有没有更好的方式来运行该脚本-m
和正确的工作目录在不改变项目文件结构?(我知道,移动NeedsModels.py
到parent_dir
会解决这个问题,但这不是我的选择。)
或者,可以在import
语句,可以改变在本地和服务器上运行两个?
感谢您的回答。有没有办法在不改变很多文件的情况下完成这个任务?例如,'NeedsModels.py'依赖于许多使用类似'import'语句的其他项目文件。 –
是的。您可以附加到.bash_rc文件中的PYTHONPATH。 sys.path实际上从那里取值。 –