python导入自定义模块

「已注销」 2020-01-25 08:15:41
https://www.jb51.net/article/138206.htm

以上是在网上找到的一些导入自定义库的说明,基本能找到的都是这样,但试了下似乎与python3.7有所出入,我试了一下,找到部分改正方法,但感觉不够全面,另外也遇到一点问题,来此请教



如图,红框表示在同一级目录下,按照前面的说法,同一级目录下的文件导入时直接import即可,但试了不行,完全找不到,在add.py中导入square.py必须用from src.my_math.square import square(main.py直接在src目录下),这和在main.py中导入square完全没有区别,且import src.my_math.square不起作用,当然import src.my_math更没用

网上找来的方法最后一个没试过,第二个,即通过sys模块导入自定义模块的path似乎也不太灵,基本路径那里就报错

另外有一个问题,不过可能是模块的原因


def square(num):
'''
获取一个数的平方
:>>>square(2)
:>>>square(3)
:param num:
:return:num的平方
'''
return num * num


if __name__ == '__main__':
import doctest, myMath

doctest.testmod(myMath)


这里用doctest模块做单元测试,下面是import myMath(这里不是上图的内容了,以上程序完全在myMath.py文件中),但此处编译器是没有提示的,它并没有找到myMath,当然也没有报错,但如果是src.myMath是有提示的,那么也就是找得到,但是报错,src不是package,当然它是directory,然而如前所述,import 一个找不到的包是会报错的,这里没有报错且运行正常,当然也可能是if语句挡住了检查
...全文
462 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2020-02-02
  • 打赏
  • 举报
回复
引用 14 楼 crifan 的回复:
找不到file1 -》你看到的是PyCharm的动态提示 -》PyCharm的动态提示,无法支持你代码中的 sys.path.append(os.getcwd()) -》你写完代码后,运行试试,应该可以的。 -》如果不可以,那说明: 你调试运行代码的路径,即os.getcwd(),不是file.py所在的目录,不是my_path目录,所以无法导入。 另外: sys.path.append(r"C:\Users\Pwcong\Desktop\python") 你说:但我试了下路径会报错 -》那把错误贴出来,别人才好帮你啊 -》怀疑你是Python3,所以不支持字符串前面的r,所以要改为 类似于这种: sys.path.append("C:\\Users\Pwcong\\Desktop\\python") 你试试如何。 注: 如果出错,前往记得:贴出来错误的问题,最好另外附上截图,否则别人没法帮你。
路径倒不是r的问题,这段代码是直接复制网上的,只是说明一下导入路径的问题,以下是可以的,就是报错消不掉有点难受,且install package square失败,不过他的意思应该是想从网上找,而不是导入本地的,这倒也正常 在不同目录下时sys.path.append(os.getcwd())就不行了,得导入路径
crifan 2020-02-02
  • 打赏
  • 举报
回复
找不到file1
-》你看到的是PyCharm的动态提示
-》PyCharm的动态提示,无法支持你代码中的 sys.path.append(os.getcwd())
-》你写完代码后,运行试试,应该可以的。
-》如果不可以,那说明:
你调试运行代码的路径,即os.getcwd(),不是file.py所在的目录,不是my_path目录,所以无法导入。

另外:
sys.path.append(r"C:\Users\Pwcong\Desktop\python")
你说:但我试了下路径会报错
-》那把错误贴出来,别人才好帮你啊
-》怀疑你是Python3,所以不支持字符串前面的r,所以要改为 类似于这种:
sys.path.append("C:\\Users\Pwcong\\Desktop\\python")

你试试如何。

注:
如果出错,前往记得:贴出来错误的问题,最好另外附上截图,否则别人没法帮你。
「已注销」 2020-02-02
  • 打赏
  • 举报
回复

# main.py
# -*- coding: utf-8 -*-
import sys
sys.path.append(r"C:\Users\Pwcong\Desktop\python")
import pwcong
pwcong.hi()
以上添加的是包所在路径,这是网上的办法,但我试了下路径会报错 现在除了通过.pth文件找到自定义模块,就只有前图中用src来找了
「已注销」 2020-02-02
  • 打赏
  • 举报
回复
引用 11 楼 crifan 的回复:
帮你试了,最后用 sys.path.append(os.getcwd()) 是可以成功导入的
好像还是不对
crifan 2020-02-02
  • 打赏
  • 举报
回复
帮你试了,最后用 sys.path.append(os.getcwd()) 是可以成功导入的

文件:square.py

def square(num):
'''
获取一个数的平方
:>>>square(2)
:>>>square(3)
:param num:
:return:num的平方
'''
return num * num

if __name__ == '__main__':
import doctest, myMath
doctest.testmod(myMath)



文件:add.py

import os
import sys
sys.path.append(os.getcwd())

from square import square

def add(x, y):
return x + y

if __name__ == '__main__':
x = 3
y = 4
sum_result = add(x, y)
print("sum_result=%s" % sum_result)

square_result = square(x)
print("square_result=%s" % square_result)


如图:

「已注销」 2020-02-02
  • 打赏
  • 举报
回复
「已注销」 2020-02-02
  • 打赏
  • 举报
回复
引用 16 楼 crifan的回复:
那你点击 More actions ,截图我看看是否有消除掉报错的可能
已经设置好了,3Q
crifan 2020-02-02
  • 打赏
  • 举报
回复
那你点击 More actions ,截图我看看是否有消除掉报错的可能
「已注销」 2020-01-30
  • 打赏
  • 举报
回复
引用 8 楼 天不绝我 的回复:
是编译器还是编辑工具啊 如果是编辑工具,那么可以不听他瞎扯
报错就是运行报错,和pycharm无关
放风喽 2020-01-30
  • 打赏
  • 举报
回复
是编译器还是编辑工具啊
如果是编辑工具,那么可以不听他瞎扯
「已注销」 2020-01-29
  • 打赏
  • 举报
回复
我在一楼补加的问题倒是解决了,第二天试了一下不知怎么的什么也没改就可以导入from src.my_math.multiplication import multiplication了,可能是编译器偶尔抽风,不过直接导入这个试了很多次就是不行的
「已注销」 2020-01-29
  • 打赏
  • 举报
回复
引用 4 楼 天不绝我的回复:
当前文件夹下的
from 。 import ****
上级目录下的
from ../*** import *****
from .. import ****
再上级目录下的
from ../../** import ***
这法办不了,试过,第一个当前目录下的我上面说了,不成
「已注销」 2020-01-29
  • 打赏
  • 举报
回复
引用 3 楼 流泪熊猫头的回复:
直接import my_math不行嘛?
编译器找不到,我上面说了
放风喽 2020-01-29
  • 打赏
  • 举报
回复
当前文件夹下的
from 。 import ****
上级目录下的
from ../*** import *****
from .. import ****
再上级目录下的
from ../../** import ***
流泪熊猫头 2020-01-29
  • 打赏
  • 举报
回复
直接import my_math不行嘛?
「已注销」 2020-01-29
  • 打赏
  • 举报
回复
人工置顶
「已注销」 2020-01-25
  • 打赏
  • 举报
回复
再加一个

import unittest
import src.my_math.multiplication
from src.my_math import multiplication


class ProductTestCase(unittest.TestCase):
    def test_integers(self):
        for x in range(-10, 10):
            for y in range(-10, 10):
                p = multiplication(x, y)
                self.assertEqual(p, x * y, 'Integer multiplication failed')


if __name__ == '__main__': unittest.main()
这一是个用unittest模块做单元测试的案例,上面有两个引入multiplication.py的语句,import src.my_math.multiplication没有用,下面使用multiplication(x, y)时报错,from src.my_math import multiplication时出现警告'multiplication' is not callable,然后就报错了,把一个模块当函数使了,但没办法呀,导入不了函数,本来应该是from src.my_math.multiplication import multiplication,然而并不行,但前面给出例子中这样是可以的,from src.my_math.square import square

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧