Python从sam上的目录导入模块

2024-10-03 04:33:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下解决方案结构:

main
main/src/myApi.py
main/unittests/myApiTests.py

myApiTests.py中,我尝试从myApi.py导入类Database 但每次尝试时都会出现以下错误:

Traceback (most recent call last): File "S:...\main\UnitTests\myApiTests.py", line 3, in from myApi import Database ModuleNotFoundError: No module named 'myApi'

import sys
sys.path.append("../src")
from myApi import Database
import unittest


class BotApiTests(unittest.TestCase):
    def test_GetUserBalance_WhenUserDoesNotExist_ThenReturn0(self):
        testDatabase = Database('testDb.db')
        userName = "testUserName"

        result = testDatabase.GetUserBalance(userName)
        self.assertEqual(result, 0)

unittest.main()

我也试过了

^{pr2}$

或者

sys.path.append("..")

或者

from myApi import Database

但什么都不管用

编辑:我在每个文件夹中都有一个空的__init__.py

编辑2:完整代码:

主/src/我的API.py公司名称:

import re
import string
import urllib.request
import sqlite3
import praw

class Database:   
    def __init__(self, name='cryptotipbot.db'):
        print("in __init__ -> ", (name))
        self.connection = sqlite3.connect(name, check_same_thread=False)
        self.database = self.connection.cursor()
        self.CreateDatabase()
        self.addressIndex = len(self.database.execute("SELECT * FROM usedAdresses").fetchall())

    def CreateDatabase(self):
        print("in CreateDatabase")
        self.database.execute("CREATE TABLE IF NOT EXISTS Users (redditUsername TEXT PRIMARY KEY, balance INTEGER)")
        self.connection.commit()
        self.database.execute("CREATE TABLE IF NOT EXISTS CommentsRepliedTo (commentId TEXT PRIMARY KEY)")
        self.connection.commit()
        self.database.execute("CREATE TABLE IF NOT EXISTS UsedAdresses (adressIndex INTEGER PRIMARY KEY, adress TEXT)")
        self.connection.commit()
        self.database.execute("CREATE TABLE IF NOT EXISTS DepositRequests (messageId TEXT PRIMARY KEY, adress TEXT, amount INTEGER)")
        self.connection.commit()

    def CreateUser(self, redditUsername):
        user = self.database.execute("SELECT * FROM Users WHERE redditUsername = ?", (redditUsername,)).fetchone()
        if not user:
            self.database.execute("INSERT INTO Users (redditUsername, balance) VALUES (?, ?)", (redditUsername, 0))
            self.connection.commit()

    def GetUserBalance(self, redditUsername):
        entry = self.database.execute("SELECT * FROM Users WHERE redditUsername = ?",(redditUsername,)).fetchone()
        if entry:
            balance = entry[1]
            return balance
        else:
            self.CreateUser(redditUsername)
            return self.GetUserBalance(redditUsername)

主/单元测试/myApiTests.py在

import unittest
from ..src import myApi

class BotApiTests(unittest.TestCase):
    def test_GetUserBalance_WhenUserDoesNotExist_ThenReturn0(self):
        testDatabase = Database('testDb.db')
        userName = "testUserName"

        result = testDatabase.GetUserBalance(userName)
        self.assertEqual(result, 0)


unittest.main()

Tags: textpyimportselfexecutemaindefunittest