python的__file__和__name__变量
#现在的目录结构为
#现在想要在web2/bin.py中调用web3/main.py模块中的方法
from web3 import main
main.foo() #在pycharm中执行#######
ok #在cmd中执行#######
ModuleNotFoundError: No module named 'web3'
#发现在pycharm中执行与在cmd中执行的结果不同(在cmd中找不到项目目录web1的路径),这是因为pycharm会自动将项目的中路径写入环境变量python中
import sys
print(sys.path) #在pycharm中执行######
['E:\9--python\web1\web2', 'E:\9--python\web1', 'E:\9--python\web1\venv\Scripts\python36.zip', 'D:\python3\DLLs', 'D:\python3\lib', 'D:\python3', 'E:\9--python\web1\venv', 'E:\9--python\web1\venv\lib\site-packages', 'E:\9--python\web1\venv\lib\site-packages\setuptools-28.8.0-py3.6.egg', 'E:\9--python\web1\venv\lib\site-packages\pip-9.0.1-py3.6.egg', 'D:\PyCharm 2017.3.4\helpers\pycharm_matplotlib_backend'] #在cmd中执行#######
['E:\9--python\web1\web2', 'D:\python3\python36.zip', 'D:\python3\DLLs','D:\python3\lib', 'D:\python3', 'D:\python3\lib\site-packages']
#==所以如果想要使得在任何环境下代码都可执行的话==,只需手动将项目的路径导入环境变量path中即可,这就需要用到__file__了
#变量__file__表示文件本身,输出的是一个绝对路径(但在pycharm中会自动输出绝对路径),所以需要将其转换成绝对路径
print(__file__) #在pycharm中执行#######
E:/9--python/python_project/web1/web2/bin.py #在cmd中执行#######
bin.py
import sys
import os
DIR_NAME=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(DIR_NAME)
sys.path.append(DIR_NAME) ########
E:\9--python\web1
#现在在cmd中先要从web2/bin.py再调用web3/main.py的方法就可实现了
#所以在pycharm中编程,需要注意其所作的一些优雅操作,防止代码在别的环境下无法执行
#在编程过程中,免不了测试环节,所以现在在web3/main.py中想要测试foo()函数是否能否执行,那么就要在其中调用。但如果现在从web2/bin.py中import模块main.py时,测试所用的foo()方法就会被执行
#在web3/main.py中
def foo():
print('ok')
foo() ########
ok
#在web2/bin.py中
from web3 import main
main.foo() ########
ok
ok
#所以如果想要解决这个问题,就需要__name__变量,现在看看__name__变量在脚本本身执行和在被调用执行的区别
#在web3/main.py中
def bar():
print(__name__)
bar() ########
main
#在web2/bin.py中
from web3 import main
main.bar() ########
web3.main
web3.main
#发现在脚本本身执行的话其输出为__main__,在被调用时执行则输出原脚本的名字
#所以可以在脚本的逻辑代码前加一句判断,使得被调用是不会执行原脚本的逻辑代码,只允许调用方法
if __name__ == '__main__':
逻辑代码
转自:
python的__file__和__name__变量
https://www.cnblogs.com/jianbonet/p/8663040.html
python的__file__和__name__变量的更多相关文章
- python __name__ 变量的含义
python __name__ 变量的含义 if __name__ == '__main__': tf.app.run() 当python读入程序时,会初始化一些系统变量.如果当前程序是主程序,__n ...
- (转)Python学习笔记(1)__name__变量
Python使用缩进对齐组织代码的执行,所有没有缩进的代码,都会在载入时自动执行.每个文件(模块)都可以任意写一些没有缩进的代码,并在载入时自动执行.为了区分 主执行代码和被调用文件,Python引入 ...
- __file__、__name__、__dict__方法整理
本文主要介绍__file__.__name__.__dict__三个方法的作用. #01 __file__:打印当前文件的位置. # import os # print(__file__) # 在py ...
- 扫盲贴000---关于python中的if __name__ == '__main__'
对于python中的__name__变量,根据调用python文件的方式不同,__name__变量的值也会不同.假如我有一个名为hello_world.py的python脚本,当我的目的是直接运行这个 ...
- python解释器遇到if __name__=="__main__"会如何做?
python解释器遇到if __name__=="__main__"会如何做 # Threading example import time, thread def myfunct ...
- Python中的if __name__ == '__main__'
如何简单地理解Python中的if __name__ == '__main__' 1. 摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__ ...
- Python 3 学习笔记之——变量作用域、模块和包
1. 变量作用域 Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的.变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称.Python 的作用域一共 ...
- 如何理解python中的if __name__=='main'的作用
一. 一个浅显易懂的比喻 我们在学习python编程时,不可避免的会遇到if __name__=='main'这样的语句,它到底有什么作用呢? <如何简单地理解Python中的if __name ...
- python两个类之间变量和函数的调用
1.class_a() class_b() 2.class_b使用class_a中的变量和函数 3.变量class_a中:class_a.num=... 函数class_b中:先实例化class_a( ...
随机推荐
- 深度探索C++对象模型之第四章:函数语义学
C++有三种类型的成员函数:1.static/nonstatic/virtual 一.成员的各种调用方式 C with Classes 只支持非静态成员函数(Nonstatic Member Func ...
- VS 2015 Download
企业版:http://download.microsoft.com/download/B/8/F/B8F1470D-2396-4E7A-83F5-AC09154EB925/vs2015.ent_chs ...
- JZOJ5146:港湾
Description 放假啦!小林和康娜来到了港口,看到有货船正在卸货.港口十分狭窄,只有两个卸货区可以使用.每个卸货区上面可以堆积任意多个箱子.每卸下来一个箱子,工作人员都会把这个箱子放在某个卸货 ...
- bzoj1070题解
[解题思路] 考虑拆点,得到一个二分图:左边点<i,j>表示第i个技师按顺序第j辆修的车,右边点k表示第k个车主,连接左右的边表示第k个车主可能成为第i个技师的第j个客户. 因为是二分图, ...
- 莫比乌斯反演+二维前缀和——hdu4746二刷
第二次做这题,求前缀和的时候还是卡住了 fg函数的反演是可以直接用莫比乌斯基本代换式来代换的 #include<bits/stdc++.h> using namespace std; #d ...
- 阶乘质因子分解——lightoj1035
#include<bits/stdc++.h> using namespace std; #define ll long long #define maxn 200 int primes[ ...
- sqoop简介和原理分析
Sqoop简介 Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL , ...
- NX二次开发-UFUN获取系统相关信息UF_ask_system_info
NX9+VS2012 #include <uf.h> UF_initialize(); UF_system_info_t Info; UF_ask_system_info(&Inf ...
- NX二次开发-获取矩阵值UF_CSYS_ask_matrix_values
NX9+VS2012 #include <uf.h> #include <uf_csys.h> UF_initialize(); //获取WCS标识 tag_t WcsId = ...
- Windows内核驱动开发入门学习资料
声明:本文所描述的所有资料和源码均搜集自互联网,版权归原始作者所有,所以在引用资料时我尽量注明原始作者和出处:本文所搜集资料也仅供同学们学习之用,由于用作其他用途引起的责任纠纷,本人不负任何责任.(本 ...