聊聊python在linux下与windows下导入模块的区别说明

我就废话不多说了,大家往下看吧~

P
|-A
| a.py
|-B
| b.py

文件结构如上,在windows下

a想运行b中的方法,可以直接写成

from B impot b
b.fun()

但是在linux中会出现

ModuleNotFoundError: No module named 'B'

可以通过引入sys添加路径解决

import sys
sys.path.append("/P/B")
from B impot b

在程序中为了也有良好的移植性,可以在代码中显式添加路径,

比如用os的方法:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

或者pathlib 方法:

BASE_DIR = Path(__file__).resolve().parent.parent

最后可以添加到 sys.path中

sys.path.append(str(BASE_DIR))

补充:python import导入三种方式(导入不同文件夹的文件,window和linux的区别)

import导入方式

1、导入python自有的库

import json

2、导入同级目录下的文件,比如在logindev.py导入read_config.py文件

# coding = utf-8
from read_config import ReadConfig
import requests
import json
# 拼接请求参数,获取cookie,作为后续登录使用

3、导入不同级别目录下的文件:

a、windows环境

# coding = utf-8
import datetime
import allure
import pytest
import json
import sys
"""windows执行的时候,直接在系统路径上新增文件夹路径"""
sys.path.append("../common")

"""linux执行的时候,直接按照相对路径引用即可"""
from common import http_request

这段代码在linux下报如下错误:

==================================== ERRORS ====================================
_______________ ERROR collecting test_case/test_member_ticket.py _______________
ImportError while importing test module '/var/jenkins_home/workspace/pytest_allure/test_case/test_member_ticket.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
test_member_ticket.py:8: in <module>
 from common import http_request
E ImportError: No module named 'common'

b、linux环境

# coding = utf-8
import datetime
import allure
import pytest
import json
import sys
"""windows执行的时候,直接在系统路径上新增文件夹路径"""
#sys.path.append("../common")

"""linux执行的时候,直接按照相对路径引用即可"""
from ..common import http_request

这段代码在windows报如下错误:

========================================================================== ERRORS ==========================================================================
__________________________________________________________ ERROR collecting test_member_ticket.py __________________________________________________________
test_member_ticket.py:8: in <module>
 from ..common import http_request
E ValueError: attempted relative import beyond top-level package
================================================================= short test summary info ==================================================================
ERROR test_member_ticket.py - ValueError: attempted relative import beyond top-level package
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
===================================================================== 1 error in 0.46s =====================================================================

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Python在不同目录下导入模块的实现方法

    python在不同层级目录import模块的方法 使用python进行程序编写时,经常会调用不同目录下的模块及函数.本篇博客针对常见的模块调用讲解导入模块的方法. 1. 同级目录下的调用 目录结构如下: – src |– mod1.py |– test1.py 若在程序test1.py中导入模块mod1, 则直接使用 2. 调用子 *import mod1*或from mod1 import *; 目录下的模块 目录结构如下: – src |– mod1.py |– lib | |– mod2.

  • Python在Windows和在Linux下调用动态链接库的教程

    Linux系统下调用动态库(.so) 1.linuxany.c代码如下: #include "stdio.h" void display(char* msg){ printf("%s\n",msg); } int add(int a,int b){ return a+b; } 2.编译c代码,最后生成Python可执行的.so文件 (1)gcc -c linuxany.c,将生成一个linuxany.o文件 (2)gcc -shared linuxany.c -o

  • Python3导入自定义模块的三种方法详解

    前话 最近跟着廖雪峰的教程学到 模块 这一节.关于如何自定义一个模块,如果大家不懂的话先来看看基本的介绍: 模块 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Module). 使用模块有什么好处? 最大的好处是大大提高了代码的可维护性.其次,编写代码不必从零

  • 聊聊python在linux下与windows下导入模块的区别说明

    我就废话不多说了,大家往下看吧~ P |-A | a.py |-B | b.py 文件结构如上,在windows下 a想运行b中的方法,可以直接写成 from B impot b b.fun() 但是在linux中会出现 ModuleNotFoundError: No module named 'B' 可以通过引入sys添加路径解决 import sys sys.path.append("/P/B") from B impot b 在程序中为了也有良好的移植性,可以在代码中显式添加路径

  • linux(centos5.5)/windows下nginx开启phpinfo模式功能的配置方法分享

    经过志文工作室测试有效的相关配置主要内容如下: 复制代码 代码如下: location ~ \.php(.*)$ { fastcgi_pass   unix:/tmp/php-cgi.sock; fastcgi_index  index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param   P

  • 使用Python实现windows下的抓包与解析

    系统环境:windows7,选择windows系统是因为我对自己平时日常机器上的流量比较感兴趣 python环境:python2.7 ,这里不选择python3的原因,是因为接下来要用到的scapy包在python3中安装较于python2要麻烦得多.如果你习惯于用python3,数据包的分析完全可以放在3下面做,因为抓包和分析是两个完全独立的过程. 需要的python包:scapy和dpkt 抓包代码: from scapy.sendrecv import sniff from scapy.u

  • Windows下安装Django框架的方法简明教程

    本文实例讲述了Windows下安装Django框架的方法.分享给大家供大家参考,具体如下: 在idea上运行Python项目时,出现了如下错误,这是因为系统中只安装了Python,没有安装Django,有童鞋可能会问,什么是Django,博主的建议是去问度年或谷老师 既然报错的原因就是缺少Django,那我们现在就开始安装这个应用框架. 本站下载Django1.6:Django-1.6.11.tar.gz 官网下载: Django-1.6.11.tar.gz || Django-1.7.11.t

  • python通过Windows下远程控制Linux系统

    一.学习目标 [通过Windows下远程控制Linux系统实现对socket模块认识] 二.实验环境 Windows下(模拟客户端 [ IP:192.168.43.87 ] ):python3.6 Linux下(模拟服务端 [ IP:192.168.43.226 ] ):python2.7 三.前提条件 两者能够ping通 服务端关闭防火墙,selinux 四.代码 服务端代码(server.py): #!/usr/bin/env python #coding:utf-8 import sock

  • python在windows下实现ping操作并接收返回信息的方法

    本文实例讲述了python在windows下实现ping操作并接收返回信息的方法.分享给大家供大家参考.具体分析如下: 这段python代码调用windows下的ping命令,通过subprocess在其子进程里面实现,由于windows下的ping和linux下的ping返回的消息不太一样,所以这段python代码要想在linux下运行,需要修改一下正则匹配 复制代码 代码如下: import subprocess   import re p = subprocess.Popen(["ping

  • python实现linux下使用xcopy的方法

    本文实例讲述了python实现linux下使用xcopy的方法.分享给大家供大家参考.具体如下: 这个python函数模仿windows下的xcopy命令编写,可以用在linux下 #!/usr/bin/python # -*- coding: UTF-8 -*- """ xcopy for Linux... Use: ______________________________________________________________________________

  • windows下Python实现将pdf文件转化为png格式图片的方法

    本文实例讲述了windows下Python实现将pdf文件转化为png格式图片的方法.分享给大家供大家参考,具体如下: 最近工作中需要把pdf文件转化为图片,想用Python来实现,于是在网上找啊找啊找啊找,找了半天,倒是找到一些代码. 1.第一个找到的代码,我试了一下好像是反了,只能实现把图片转为pdf,而不能把pdf转为图片... 参考链接:https://zhidao.baidu.com/question/745221795058982452.html 代码如下: #!/usr/bin/e

  • windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)

    N久没有开始写博客了,总觉得要随便记点东西,岁月蹉跎,曾经搞得一些东西.技术.工具,说丢也就丢了,点点滴滴还是要记录一下吧... 在windows下使用pip安装一些python的第三方库,有很多使用C写了一些扩展,需要使用VC++ Compiler 来编译安装(也可使用MInGW,一般不推荐),否则就会出现"Unable to find vcvarsall.bat".像Python2.7就需要使用VS2008 C++ compiler , 而python3至python3.4 (py

随机推荐