我有一个django应用程序,带有一个名为"app"的
模块现在这个模块有一个名为"urls.py"的文件,它有一个名为"HOME_URL " 的变量
我想做什么?
app_label = "app"
url = __import__(app_label).urls.HOME_URL
print url
Run Code Online (Sandbox Code Playgroud)
这显然不起作用,但我希望你得到我正在尝试做的事情,如果没有请评论我将编辑问题以包含更多信息.
我已经浏览并发现了很多问题和很多答案,但似乎没有任何问题。
我设置了两个文件config.py和test.py名为test一个文件夹下。
配置包括代码:
class Config:
def __init__(self, name):
self.name = name
Run Code Online (Sandbox Code Playgroud)
而测试有:
try:
# Trying to find module in the parent package
from . import config
print(config.debug)
del config
except ImportError:
print('Relative import failed')
try:
# Trying to find module on sys.path
import config
print(config.debug)
except ModuleNotFoundError:
print('Absolute import failed')
Run Code Online (Sandbox Code Playgroud)
这已根据此堆栈答案的答案供应商汇总在一起。
不幸的是,我同时出现了两个错误,当我尝试直接调用它时,from config import Config我得到 ModuleNotFoundError
我真的对这个迷失了方向,不知道从哪里开始。
使用 Python 3.6,atom.io 作为我的 IDE。
我是 Python 新手,在这个简单示例中出现以下错误:
这是我的项目结构:
python_project
.
??? lib
? ??? __init__.py
? ??? my_custom_lib.py
??? src
??? __init__.py
??? main.py
Run Code Online (Sandbox Code Playgroud)
这是我执行src/main.py文件时的错误:
? python_project python src/main.py
Traceback (most recent call last):
File "src/main.py", line 3, in <module>
from lib import my_custom_lib
ImportError: No module named lib
Run Code Online (Sandbox Code Playgroud)
如果我将main.py文件移动到根目录,然后再次执行此文件,则可以工作...但无法在src/目录中工作
这是我的main.py:
from lib import my_custom_lib
def do_something(message):
my_custom_lib.show(message)
do_something('Hello World!')
Run Code Online (Sandbox Code Playgroud)
注意:当我从Pycharm执行相同的代码时工作正常,但不能从我的终端执行。
我有一个python脚本,它从互联网上获取图像,下载它,设置为桌面背景并在一分钟后更新.问题很可能是cx_Freeze不包括os模块,因为具有绝对路径的相同代码工作正常.我的代码也很完美,直到它冻结.它在我通过控制台加载,从IDLE运行或双击它之前冻结.每当我运行冻结文件时,我都会收到错误(如果我使用setup.py或cxfreeze file.py:
C:\Python33\Scripts>C:\Python33\Scripts\dist\desktopchanger.exe
Traceback (most recent call last):
File "C:\Python33\lib\site-packages\cx_Freeze\initscripts\Console3.py", line 2
7, in <module>
exec(code, m.__dict__)
File "C:\Python33\desktopchanger.pyw", line 7, in <module>
dir = path.dirname(__file__)
NameError: name '__file__' is not defined
Run Code Online (Sandbox Code Playgroud)
import pythoncom
from urllib import request
from win32com.shell import shell, shellcon
from time import sleep
from os import path
dir = path.dirname(__file__) #get dierctory script is in
startpath = str(path.join(dir+'/bg/bg.jpg')) #add /bg/bg.jpg to path of script
pathtoimg=[]
for char in startpath:
if char != "/": …Run Code Online (Sandbox Code Playgroud) 问题
假设我有这个模块名为custom_module:
class CustomClass:
pass
Run Code Online (Sandbox Code Playgroud)
我在脚本中使用此类来序列化我在以下位置定义的类的对象custom_module:
import cloudpickle
import custom_module as cm
custom_object = cm.CustomClass()
with open('filename.pkl', 'wb') as file:
cloudpickle.dump(custom_object, file)
Run Code Online (Sandbox Code Playgroud)
我将此 pickle 文件复制到另一个环境并使用另一个脚本加载它:
import cloudpickle
with open('filename.pkl', 'rb') as file:
custom_object = cloudpickle.load(file)
Run Code Online (Sandbox Code Playgroud)
这会产生这个错误:
Traceback (most recent call last):
File "loader.py", line 4, in <module>
custom_object = cloudpickle.load(file)
ModuleNotFoundError: No module named 'custom_module'
Run Code Online (Sandbox Code Playgroud)
尴尬的解决方案
作为解决方法,可以读取并执行custom_module脚本中的所有内容:
exec(open(path.join('custom_module.py')).read())
Run Code Online (Sandbox Code Playgroud)
但这看起来真的很奇怪,我不能使用 CustomClass 作为cm.CustomClass. 是否有其他解决方案不涉及将第一个环境中的所有代码复制到第二个环境中?
在我的模块中,我有几个依赖于具有较长启动时间的外部模块的功能.我该怎么用LazyLoader?如果我有
import veggies
Run Code Online (Sandbox Code Playgroud)
要么
import veggies.brussels.sprouts
Run Code Online (Sandbox Code Playgroud)
要么
from veggies.brussels import sprouts
Run Code Online (Sandbox Code Playgroud)
如何替换这些语句以便LazyLoader模块内容的执行被推迟到需要时?
从文档中可以立即明白如何使用它.没有示例,并且nullege代码搜索仅提供Python本身包含的单元测试.
我有这样的文件结构:
project_folder/
notebooks/
notebook01.ipynb
notebook02.ipynb
...
notebookXY.ipynb
module01.py
module02.py
module03.py
Run Code Online (Sandbox Code Playgroud)
在.ipynb文件notebook/夹内的文件中,我想从module01.py, module02.py和导入类和函数module03.py。
我在这个问题中找到了答案,可以在每个笔记本中使用以下代码行并每次将这些行作为第一个单元格运行:
import os
import sys
module_path = os.path.abspath(os.path.join('..'))
if module_path not in sys.path:
sys.path.append(module_path)
Run Code Online (Sandbox Code Playgroud)
请问有更好的方法吗?如果.ipynb文件notebooks/夹中有很多文件,我是否必须在每个文件的开头粘贴这些代码行?有没有更好、更简约或更干净的方式?
我的代码:
import pyttsx3
import random
engine = pyttsx3.init()
words = ['hello', 'word']
engine.say(random.choice(words)) #Say these words slower
Run Code Online (Sandbox Code Playgroud)
我不希望它变得非常慢,只是慢到足以让非母语人士轻松理解单词列表中的单词。另外,如果使用 pyttsx 模块无法做到这一点,您能否建议一个可以做到这一点的模块?
我有一个这样的文件夹结构:
- modules
- root
- abc
hello.py
__init__.py
- xyz
hi.py
__init__.py
blah.py
__init__.py
foo.py
bar.py
__init_.py
Run Code Online (Sandbox Code Playgroud)
这是字符串格式的相同内容:
"modules",
"modues/__init__.py",
"modules/foo.py",
"modules/bar.py",
"modules/root",
"modules/root/__init__.py",
"modules/root/blah,py",
"modules/root/abc",
"modules/root/abc/__init__.py",
"modules/root/abc/hello.py",
"modules/root/xyz",
"modules/root/xyz/__init__.py",
"modules/root/xyz/hi.py"
Run Code Online (Sandbox Code Playgroud)
我正在尝试以 python 导入样式格式打印出所有模块。一个示例输出是这样的:
modules.foo
modules.bar
modules.root.blah
modules.root.abc.hello
modules.root.xyz.hi
Run Code Online (Sandbox Code Playgroud)
我怎样才能在 python 中轻松地做到这一点(如果可能的话,没有第三方库)?
- modules
- root
- abc
hello.py
__init__.py
- xyz
hi.py
__init__.py
blah.py
__init__.py
foo.py
bar.py
__init_.py
Run Code Online (Sandbox Code Playgroud)
但是,此代码只会打印出 'foo' 和 'bar'。但不是“root”,它是子包。我也无法弄清楚如何转换它以保留它的绝对导入样式。当前代码只获取包/模块名称,而不是实际的绝对导入。
我正在尝试在我的计算机上安装新的 python 模块,我知道如何通过终端安装,但我想知道是否有办法直接通过 VSCode 安装新模块(就像在 PyCharm 上一样)?
我已经通过终端安装了,这不是问题,但是我想安装而无需在使用 VSCode 时打开终端。
python python-module python-3.x visual-studio-code vscode-settings
python ×10
python-module ×10
python-3.x ×4
cx-freeze ×1
dill ×1
django ×1
importerror ×1
init ×1
pickle ×1
pyttsx ×1
setup.py ×1