我在生产中使用 Flask 并使用 Heroku 在我的笔记本电脑上一切都运行良好,但当我将其推送到 Heroku 时就无法让它工作
这是我从根目录开始的目录层次结构:
__init__.py (empty)
app.py
Procfile
sub1/
----__init__.py (empty)
----sub2/
--------__init__.py (empty)
--------file.py
我的
app.py
:
from sub1.sub2.file import Myclass
x = Myclass()
我的
sub1/sub2/file.py
文件:
class Myclass():
# Some code
我的
Procfile
:
web: gunicorn app:app
我的笔记本电脑上一切正常,但当我将其推送到 Heroku 时,我收到错误:
ModuleNotFoundError: No module named 'sub1.sub2.file'
我尝试过使用
from .sub1.sub2.file import Myclass
进行相对导入,但出现错误:
ImportError: attempted relative import with no known parent package
我也尝试过:
import sub1 as sub1
里面app.py
x = sub1.sub2.file.Myclass()
里面app.py
from . import sub2
内添加
sub1/__init__.py
from . import file
内添加
sub1/sub2/__init__.py
我还尝试在 sys.path 中添加文件夹:
base_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(base_dir)
sys.path.append(os.path.join(base_dir, 'sub1'))
sys.path.append(os.path.join(base_dir, 'sub1', 'sub2'))
from sub1.sub2.file import Myclass
我也尝试过:
from sub1 import sub2
在 app.py
x = sub1.Myclass()
在 app.py
from .sub2 import file
在 sub1/__init__.py
from .file import Myclass
在 sub1/sub2/__init__.py
AttributeError: module 'sub1.sub2' has no attribute 'Myclass'
再一次,当我执行
python app.py
或 foreman start -f Procfile
时,每个解决方案都可以在我的笔记本电脑上运行,但在 Heroku 上却无法运行......有可能吗?
事实证明这不是Python导入问题。
在我的生产服务器上,我设置了持久存储。在部署期间,它不是将文件附加到所需的文件夹(sub2),而是删除所有内容并添加他自己的文件......
我发现这一点是因为当我卸载持久存储时,我看到弹出了一个不同的问题,这让我一步一步得出了这个结论。因此,现在将持久存储安装在另一个子文件夹上以避免这种行为。