如何在完整路径下加载Python模块?请注意,该文件可以位于文件系统中的任何位置,因为它是一个配置选项.
我想获取当前文件的目录路径.
我试过了:
>>> os.path.abspath(__file__)
'C:\\python27\\test.py'
Run Code Online (Sandbox Code Playgroud)
但是如何检索目录的路径?例如:
'C:\\python27\\'
Run Code Online (Sandbox Code Playgroud) 包括我在内的人都知道Python中有一些东西叫它__future__,它出现在我读过的很多模块中.像我这样沉闷的人不知道它为什么存在,以及如何/何时使用它,即使在阅读了Python的__future__文档之后.
那么用示例来解释一下吗?
在基本用法方面,我快速得到了一些答案,看起来都是正确的.
但是,为了进一步了解如何__future__工作:
当我试图理解它时,我刚刚意识到一个让我感到困惑的关键事情,那就是当前的python版本如何包含将在未来版本中发布的内容?如何在当前的python版本中成功编译未来python版本中使用新功能的程序?
所以,我想现在,当前版本已经打包了一些潜在的功能,将包含在未来的版本中 - 这是对的吗?但这些功能只能通过__future__,因为它还没有成为标准 - 我是对的吗?
我想从同一目录中的另一个文件导入一个函数.
有时它适用于我,from .mymodule import myfunction但有时我会得到:
SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)
有时它适用from mymodule import myfunction,但有时我也得到:
SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)
我不明白这里的逻辑,我找不到任何解释.这看起来完全随机.
有人可以向我解释这一切背后的逻辑是什么吗?
我有一个名为的脚本requests.py导入请求包.该脚本无法访问包中的属性,也无法导入它们.为什么这不起作用,我该如何解决?
以下代码提出了一个问题AttributeError.
import requests
res = requests.get('http://www.google.ca')
print(res)
Run Code Online (Sandbox Code Playgroud)
Traceback (most recent call last):
File "/Users/me/dev/rough/requests.py", line 1, in <module>
import requests
File "/Users/me/dev/rough/requests.py", line 3, in <module>
requests.get('http://www.google.ca')
AttributeError: module 'requests' has no attribute 'get'
Run Code Online (Sandbox Code Playgroud)
以下代码提出了一个问题ImportError.
from requests import get
res = get('http://www.google.ca')
print(res)
Run Code Online (Sandbox Code Playgroud)
Traceback (most recent call last):
File "requests.py", line 1, in <module>
from requests import get
File "/Users/me/dev/rough/requests.py", line 1, in <module>
from requests import get
ImportError: cannot import name 'get' …Run Code Online (Sandbox Code Playgroud) 该模块的Python帮助imp是讨论冻结模块.它是什么?
当一个foo人在源目录中尝试导入模块时,会得到一个相当混乱的ImportError消息:ImportError: No module named foo.
如何轻松捕获此案例并返回更多信息,例如"请不要从源目录加载模块foo"?
有了__init__.py,我会开始:
try:
from _foo import *
except ImportError:
## check whether in the source directory...
Run Code Online (Sandbox Code Playgroud)
所以我想区分a的不同原因ImportError(例如,因为一个名为的模块foo根本没有安装),并检测它setup.py位于当前目录中的情况.这样做的优雅方式是什么?
假设我有一个包含模块的包:
SWS/
__init.py__
foo.py
bar.py
time.py
Run Code Online (Sandbox Code Playgroud)
并且模块需要引用彼此包含的功能.似乎我遇到了time.py模块问题,因为有一个标准模块同名.
例如,在我的foo.py模块需要我SWS.time和标准python time 模块的情况下,我遇到麻烦,因为解释器将查看包内部并time.py在它遇到标准time模块之前找到我的模块.
有没有办法解决?这是禁止的情况,模块名称是否应该重复使用?
关于包装哲学的任何解决方案和意见在这里都很有用.
当文件prog.py与具有相同名称的本地模块(math.py)放在同一目录中时,如何访问标准库模块(比如数学)?
我问这个问题,因为我想创建uncertainties一个可以用作的包
import uncertainties
from uncertainties.math import *
Run Code Online (Sandbox Code Playgroud)
因此,不确定性目录中有一个本地数学模块.问题是我想从不确定性/ __ init__.py访问标准库数学模块.
我不想重命名不确定性.因为这个模块正是用于替换数学模块中的函数(具有处理数值不确定性的等价物).
PS:这个问题与我为执行不确定性计算而编写的模块有关,同时考虑了变量之间的相关性.
我正在开发一个旨在通过部分订购信息扩充Python套接字消息的项目.我正在构建的库是用Python编写的,需要插入通过套接字函数发送的现有系统的消息.
我已经阅读了一些资源,即@Omnifarious在这个问题上的答案python- imports -from-builtin-library-when-module-with-name-name-exist
你可以做一件非常丑陋和可怕的事情,不涉及钩住进口机制.这是你可能不应该做的事情,但它可能会奏效.它将您的日历模块变为系统日历模块和日历模块的混合体.
我已经实现了导入机制解决方案,但我们已经决定这不是我们想要采取的方向,因为它过分依赖于环境.在我的情况下,将类合并为混合而不是依赖导入机制的解决方案似乎是最好的方法.
为什么混合动力被称为丑陋而可怕的解决方案?我想在我的项目中开始实现它,但我对这些警告很谨慎.它似乎有点hackish,但由于它将成为安装脚本的一部分,运行此一次不是没有问题吗?
这是一个代码片段,其中插入需要在发送之前拦截套接字消息:
class vector_clock:
def __init__(self):
"""
Initiate the clock with the object
"""
self.clock = [0,0]
def sendMessage(self):
"""
Send Message to the server
"""
self.msg = "This is the test message to that will be interposed on"
self.vector_clock.increment(0) # We are clock position 0
# Some extraneous formatting details removed for brevity….
# connectAndSend needs interpositioning to include the vector clock
self.client.connectAndSend(totalMsg);
self.client.s.close()
Run Code Online (Sandbox Code Playgroud) python ×10
module ×3
directory ×1
exception ×1
imp ×1
import ×1
importerror ×1
namespaces ×1
networking ×1
package ×1
python-2.x ×1
python-3.x ×1
shadowing ×1
sockets ×1