【问题标题】:Python can't find module to import despite __init__.py files being present尽管存在 __init__.py 文件,Python 仍找不到要导入的模块
【发布时间】:2022-01-14 08:18:19
【问题描述】:

我已经看了一天左右,正准备把头发拔掉。帮助我,所以,你是我唯一的希望。

我找到了无数解决这个问题的方法,归结为“确保您在适当的地方有 __init__.py 并且它应该可以正常工作。”

我确定我遗漏了一些明显的东西,这是一个菜鸟问题。

无论如何-

Folder structure here

我添加了我认为应该存在的 __init__ 文件。

这是我的单元测试代码:

    import unittest
from pyrum.src import Card

class TestCard(unittest.TestCase):

    def setUp(self):
        pass

    def test_Card_Initalization(self):
        #Tests that numeric position is set properly for various options.
        self.assertTrue(Card("S","A").position==1)
        self.assertTrue(Card("S","2").position==2)
        self.assertTrue(Card("S","J").position==11)
        self.assertTrue(Card("S","Q").position==12)
        self.assertTrue(Card("S","K").position==13)
        #Tests that an exception is raised when an invalid suit is passed.
        with self.assertRaises(Exception) as context:
            Card("Z","Z")
        self.assertTrue('Suit Z provided does not match recongized suit code. Options are: [S: Spades, H: Hearts, C: Clubs, D: Diamonds]' in str(context.exception))

    def test_attack(self):
        pass

    def tearDown(self):
        pass

它正在建设中,但就是这样。

无论我如何调用 test_Card.py(尝试了几种不同的方式/上下文),我仍然得到

 Traceback (most recent call last):
  File "/workspaces/VSCodeDockerTest/pyrum/test/test_Card.py", line 2, in <module>
    from pyrum.src import Card
ModuleNotFoundError: No module named 'pyrum'

不过据我了解,找pyrum应该是没问题的。当我将卡和测试模块放在同一个文件夹中(并相应地更改导入)时,它工作正常。

有人可以向我解释我缺少什么吗?我在这里束手无策,不知道我还能搜索或查看什么来找到解决方案。

谢谢!

【问题讨论】:

    标签: python python-unittest


    【解决方案1】:

    试试:from src import Card 这可以工作

    【讨论】:

      【解决方案2】:

      当您导入pyrum.src 时,您将其视为一个模块。因此,您必须使用-m option

      示例:如果您的pyrum 文件夹位于a/b/c/pyrum,请站在a/b/c 并调用

      python -m pyrum.test.test_Card  # without .py extension
      

      【讨论】:

      • 我试过了,它似乎不喜欢那样。无论如何,它仍然会引发相同的错误。现在可以从 pyrum 的父目录工作,但我不相信它在我更改 PYTHONPATH 之前有效。
      【解决方案3】:

      这是我自己的解决方案。如果有人对正在发生的事情有更好的答案,我会全力以赴。

      来自此相关问答:
      My module has __init__.py and still Python can't import it

      似乎问题在于 python 没有像我认为的那样处理路径?我能够通过运行修复它

      cd ..
      export PYTHONPATH=.
      

      然后运行

      python ./pyrum/tests/runner.py
      

      (runner.py 依次运行我所有的测试)

      我还从 src 和测试中删除了 __init__.py 文件,但我不确定这是否是必要的或有帮助的。

      我很好奇如何避免每次我想在不永久修改路径的情况下运行测试时都必须这样做。我正在 Docker 上进行开发,所以我不太担心这是否是最好的解决方案(如果我真的需要的话,我可以编写一个 bash 脚本来完成这三件事......)但我想要一个干净且可移植的解决方案,如果有人的话有更好的东西。我假设使用虚拟环境会缓解这个问题,所以我可能会在未来尝试这个作为我的下一个随机尝试。

      现在它在任何地方都可以工作除了调试器。

      【讨论】:

      • 这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker.
      • 解决问题的文字步骤如何不是问题的解决方案?
      • 可能是因为您答案的最后一部分似乎是一个后续问题。请删除该部分并将其编辑为问题或提出新问题...另外“我在发布后立即找到了一种让它工作的方法”那么也许您应该在发布之前等待?给自己一个解决问题的机会。不过,提出问题是一个很好的步骤。尝试阅读您自己的问题并再次解决它,只有当您无法再次成功时,才发布它
      • "我正在 Docker 上开发" 你的答案中的这个细节在你的问题中没有清楚地出现。您可能想编辑您的问题以包含/提及该信息以改进您的minimal reproducible example
      猜你喜欢
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 2013-04-21
      • 2016-04-17
      • 1970-01-01
      相关资源
      最近更新 更多