在 Flask 中导入嵌套子文件夹文件

问题描述 投票:0回答:1

我在生产中使用 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 heroku python-import
1个回答
0
投票

事实证明这不是Python导入问题。

在我的生产服务器上,我设置了持久存储。在部署期间,它不是将文件附加到所需的文件夹(sub2),而是删除所有内容并添加他自己的文件......

我发现这一点是因为当我卸载持久存储时,我看到弹出了一个不同的问题,这让我一步一步得出了这个结论。因此,现在将持久存储安装在另一个子文件夹上以避免这种行为。

© www.soinside.com 2019 - 2024. All rights reserved.