为了说明我正在尝试做什么,假设我有一个testmod位于./testmod.py. 这个模块的全部内容是
x = test
Run Code Online (Sandbox Code Playgroud)
我希望能够使用任何可用的工具importlib或任何其他内置库成功地将此模块导入 Python 。
显然import testmod从当前目录做一个简单的语句会导致错误:NameError: name 'test' is not defined.
我想,也许无论是传球globals还是locals要__import__正确地将修改剧本正在运行的内部环境,但事实并非如此:
>>> testmod = __import__('testmod', globals={'test': 'globals'}, locals={'test': 'locals'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/jfoxrabi/testmod.py", line 1, in <module>
x = test
NameError: name 'test' is not defined
Run Code Online (Sandbox Code Playgroud)
我以不同的方式设置了 test 的值,这样我就可以看到testmod.x如果这行得通,我可以看到哪个 dict来自。
由于这些似乎都不起作用,我被卡住了。甚至有可能完成我想要做的事情吗?我猜是的,因为这是 Python,而不是 Sparta。
我在 Anaconda 上使用 …
我有一个some_module.py包含以下代码的模块:
def testf():
print(os.listdir())
Run Code Online (Sandbox Code Playgroud)
现在,在一个名为 的文件中test.py,我有以下代码:
import os
from some_module import testf
testf()
Run Code Online (Sandbox Code Playgroud)
但是执行 test.py 给了我NameError: name 'os' is not defined. 我已经导入os了test.py,并且testf在test.py. 那么为什么会出现这个错误呢?
最近在用python接触多线程领域。以下示例将更好地说明我的问题:所以我有两个 .py 文件,一个是 test.py,另一个是 test2.py
在 test.py 中:
import time
from datetime import datetime
from threading import Thread, Lock
lock = Lock()
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(threadName)s %(name)s.%(funcName)s [%(levelname)s]: %(message)s')
def foo1():
while True:
with lock:
logging.info(datetime.now())
time.sleep(0.2)
if __name__ == '__main__':
from test2 import foo2
Thread(target=foo1).start()
Thread(target=foo2).start()
Run Code Online (Sandbox Code Playgroud)
在 test2.py 中:
import time
from datetime import datetime
from test import logging, lock
def foo2():
while True:
with lock:
logging.info( datetime.now() )
time.sleep(5)
Run Code Online (Sandbox Code Playgroud)
输出:
2017-03-17 17:11:06,210 Thread-1 root.foo1 [INFO]: 2017-03-17 17:11:06.210000 …Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用 PyCharm,因为我想更多地使用 Python(对其他语言有更多的经验),并且遇到了一个必须有解决方案的难题。我创建的某些自定义函数依赖于以特别冗长的方式导入的模块,因此我不想在每次编码时都复制粘贴相同的两行,而不是简单地键入import numpy as np.
那么有没有办法在我的环境启动时自动运行一些代码?特别是要导入一些模块?我环顾了 PyCharm 的设置,但一无所获。
我是python的新手。我正在学习 python 如何与 json 一起工作。在 pycharm 中编写此代码后,我在多个位置收到未解析的引用。“导入解析为其包含文件”。“在 json.py 中找不到对转储的引用”“在 json.py 中找不到对负载的引用”
导入 json 时出现此错误,调用了 load() 和 dumps() 方法。这是我学习 Python 编码的视频链接。
https://www.youtube.com/watch?v=9N6a-VLBa2I&list=PL-osiE80TeTt2d9bfVyTiXJA-UTHn6WwU&index=44
请帮我解决这个问题。
import json
# Decoding json string to python.
# This a python string that happens to be a valid json also.
people_string = '''
{
"people": [
{
"name": "Sumedha",
"phone":"0987654312"
"City": "Middletown"
},
{
"name": "Ankit",
"phone":"9999999999"
"City": "Middletown2"
},
{
"name": "Hemlata",
"phone":"9865656475"
"City": "Chandigarh"
}
]
}
'''
# loads method loads the string.
data …Run Code Online (Sandbox Code Playgroud) 我的包结构:
root_pkg
root_pkg/__init__.py # empty
root_pkg/game
root_pkg/game/__init__.py # empty
root_pkg/game/game1.py
root_pkg/utils
root_pkg/utils/__init__.py # empty
root_pkg/utils/lib.py
Run Code Online (Sandbox Code Playgroud)
root_pkg/game/game1.py 包含:
"""File root_pkg/game/game1.py"""
from ..utils import lib
Run Code Online (Sandbox Code Playgroud)
不会发出任何错误
然而,在 pycharm 中运行它:
C:\_\Python363-64\python.exe C:/Dropbox/eclipse_workspaces/python/test_imports/root_pkg/game/game1.py
Traceback (most recent call last):
File "C:/Dropbox/eclipse_workspaces/python/test_imports/root_pkg/game/game1.py", line 3, in <module>
from ..utils import lib
ValueError: attempted relative import beyond top-level package
Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)
但是,内容和源路径被添加到运行配置中的 python 路径:
那么为什么 Pycharm 不能运行这个呢?它不应该将项目文件夹添加到 PYTHONPATH 吗?使用正确的导入样式吗?
编辑:更改运行配置中的工作目录会C:\Dropbox\eclipse_workspaces\python\test_imports\导致相同的错误:
C:\_\Python363-64\python.exe C:/Dropbox/eclipse_workspaces/python/test_imports/root_pkg/game/game1.py
Traceback (most recent call last):
File "C:/Dropbox/eclipse_workspaces/python/test_imports/root_pkg/game/game1.py", line 3, …Run Code Online (Sandbox Code Playgroud) 我想在 PyCharm 2018.3.2 中使用 BeautifulSoup4。问题是,“bs4”和“BeautifulSoup”/“BeautifulSoup4”在编写时在PyCharm中带有红色下划线:
from bs4 import BeautifulSoup (or BeautifulSoup4)
Run Code Online (Sandbox Code Playgroud)
没有其他东西无法导入,只有这个模块。红色下划线告诉我“bs4”和“BeautifulSoup(4)”是一样的:
“未解决的引用 'bs4' 少... (Ctrl+F1)
检查信息:此检查检测应该解析但不解析的名称。由于动态调度和鸭子类型,这在有限但有用的情况下是可能的。比实例项更好地支持顶级和类级项"
当我运行 PyCharm 时,错误显示:“ModuleNotFoundError: No module named 'bs4'”
在 cmd pip3 中已经正确安装了所有东西。不得不卸载并安装几次才能确定。Atm 安装后如下所示:
还有这个:
pip check bs4
pip check beautifulsoup4
Run Code Online (Sandbox Code Playgroud)
说:“没有发现损坏的要求。”
我对 python 相当陌生,但我在网上搜索了答案,但没有找到“未解决的参考”。以为可能是路径惹的祸,但最近安装的请求和模块放在我的存档中的同一个文件夹中,因此 PyCharm 应该能够在能够找到请求时找到 bs4。
我想问一下是否有办法从与另一个文件夹相邻的项目中的文件夹中导入模块/函数。
例如,假设我有两个文件:
project/src/training.py
project/lib/functions.py
Run Code Online (Sandbox Code Playgroud)
现在这两个文件夹中都有__init__.py文件。如果我想导入functions.py到training.py,它似乎没有检测到。我正在尝试使用from lib.functions import *.I 知道这在文件夹结构的上层起作用,我可以从脚本调用这两个文件,但是有没有办法在上面/侧面文件夹中执行文件?
我刚刚发现当我这样做时
import pygame.joystick
Run Code Online (Sandbox Code Playgroud)
我不仅可以访问joystick,还display可以访问 ,例如我可以
pygame.display.init()
Run Code Online (Sandbox Code Playgroud)
就像我只是简单地导入了pygame.
有什么不同?
假设根据我想导入一些类的变量,创建它的对象并返回它。例如 :
if x=='SomeThing':
import something
object = something's object
else:
import nothing
object = nothing's object
object.function()
Run Code Online (Sandbox Code Playgroud)
我想使用 lambda 执行上述操作,我该怎么做?
python-import ×10
python ×8
python-3.x ×6
pycharm ×3
automation ×1
function ×1
lambda ×1
module ×1
python-3.7 ×1
shadowing ×1