这是我的目录树
Game/
a/
1.py
...
b/
2.py
Run Code Online (Sandbox Code Playgroud)
在 2.py 中,我希望从 1.py 导入函数显示。首先我将两个文件放在同一个文件夹中没有问题。但是如何从其他位置导入?
假设我有一个名为module1以下的模块:
def main():
print 'K DawG'
main()
Run Code Online (Sandbox Code Playgroud)
和module2只有这一行:
import module1
Run Code Online (Sandbox Code Playgroud)
基本上什么情况是,当我运行module1它不会打印K DawG预期,当我运行moudle2,除非我明确指出module1.main()它不应该做任何事情,但它也打印K DawG
为什么会这样?python是否运行导入期间导入的脚本?如果是这样,我怎么能阻止这种情况发生?
这是错误:
Traceback (most recent call last):
File "/home/endergreen/PyOS/SHOE/C.pyx", line 24, in <module>
x.execute()
AttributeError: 'str' object has no attribute 'execute'
Run Code Online (Sandbox Code Playgroud)
这是一组代码:
#!/usr/bin/env python
import os as os
import sys as sys
import time as time
import DefaultX as x
def setup():
execfile ("Setup.pyx")
print ("Running...")
def start():
execfile ("/HDD/BOOT.pyrx")
print ("Running...")
def end():
print ("Stopping...")
time.sleep (3)
x.machine_start
x = raw_input (">>>")
if x == 'setup':
x.setup()
if x == 'start':
x.start()
if x == 'execute':
x.execute()
if x == …Run Code Online (Sandbox Code Playgroud) 我最近安装了 python、ipython 和 pip,使用 pip 我安装了 socket 库,还有很多其他的,现在我无法在通过 cmd 运行 python 程序时导入 socket,但我可以使用 ipython,当我运行 ipython 时我导入套接字一切正常,现在我编写了一个简单的脚本,名为“tcp.py”,它包含的只是以下行
进口插座
Traceback (most recent call last):
File "C:\dir\desktop\tcp.py", line 1, in <module>
import socket
File "C:\dir\desktop\socket.py", line 1, in <module>
socket
NameError: name 'socket' is not defined
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个问题吗?
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras.layers import Embedding, Dense, Dropout, Reshape, Merge,
BatchNormalization, TimeDistributed, Lambda, Activation, LSTM, Flatten,
Convolution1D, GRU, MaxPooling1D
from keras.regularizers import l2
from keras.callbacks import Callback, ModelCheckpoint, EarlyStopping
from keras import initializers
from keras import backend as K
from keras.optimizers import SGD
Run Code Online (Sandbox Code Playgroud)
ImportErrorTraceback (most recent call last)
<ipython-input-104-b13df7676198> in <module>()
16 from keras.regularizers import l2
17 from keras.callbacks import Callback, ModelCheckpoint, EarlyStopping
---> …Run Code Online (Sandbox Code Playgroud) 在我们的项目中,有一个utils.py文件为多个文件(DRY)提供了功能。
不用说这是如何完成的,但我会注意以防万一不明白,在这些文件中我们import utils使用必要的功能。
在开发过程中,我们的一位开发人员上传了一个 PR,他在utils.py文件中添加了多项功能,这是其中之一:
list_dir(directory):
return os.listdir(directory)
Run Code Online (Sandbox Code Playgroud)
当我们问他为什么写这个函数时(只是import os在你需要的文件中,并使用os.listdir)
他说:
import os在这些文件中使代码变得丑陋(然后imports对于外部模块的每一行使用更多,然后imports在文件顶部有数千个)import utils 已经存在于那些文件中。import os 已经存在于utils.py文件中。不用说,我们都知道 Python 对模块做了一次性导入,这里的问题是不同的:
什么更叫 Pythonic ?当有一行(可能是两行)函数时,只需将模块导入需要该函数的文件中(虽然看起来代码变得丑陋),或者将其写入utils.py. ?
我正在编写一个Python3程序,我需要能够动态覆盖某些方法.我的文件夹结构更像是:
./
prog.py
methods/
add.py
minus.py
Run Code Online (Sandbox Code Playgroud)
在prog.py我想调用一个calc()在add.py和中定义的函数minus.py.我希望代码可以像以下一样工作:
def prog('foo'):
from method.foo import calc
calc()
Run Code Online (Sandbox Code Playgroud)
但是在函数中间导入似乎很糟糕,可能会减慢整个程序的速度.有没有可以达到同样效果的解决方法?
我试图变得灵活,以便稍后可以添加更多方法,因此我避免使用if语句并立即导入所有模块.
我有以下问题。我通过conda install rpy2在我的 virtualenv 中安装了 rpy2 。现在,如果我运行,我可以在终端中导入这个包
>>> python
>>> import rpy2
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试在 jupyter notebook 中导入 rpy2,则会出现错误ModuleNotFoundError: No module named 'rpy2'。如果我运行以下代码
import sys
print(sys.prefix)
Run Code Online (Sandbox Code Playgroud)
我明白了/anaconda3。另外,如果我通过终端做同样的事情:python->import sys -> print(sys.prefix)我得到/anaconda3/envs/work_python36. 如果我which python在终端中运行,我将获得:/anaconda3/envs/work_python36/bin/python. 我尝试PYTHONPATH使用导出进行更改,但没有奏效。如果有人知道如何解决这个问题,请告诉我。
我还打印了以下内容 conda info -a
active environment : work_python36
active env location : /anaconda3/envs/work_python36
shell level : 1
user config file : /Users/alex/.condarc
populated config files :
conda version : 4.5.12
conda-build version : …Run Code Online (Sandbox Code Playgroud) 我有一个具有以下结构的 python (3.6.3) 项目
setup.py
utils #python package
utils/constants.py
utils/name_reports.py
normalization #python package
normalization/resolve_name.py
categorization #python package
categorization/animal_categories.py
Run Code Online (Sandbox Code Playgroud)
您可以在 github 上找到源代码 - https://github.com/techmango-org/python-import-resolution
这是源代码 utils/name_reports.py
import normalization.resolve_name as rn
import categorization.animal_categories as ac
test_name = 'DOGY'
resolved_name = rn.get_animal_name(test_name)
print('********ANIMAL CATEGORY IS:', ac.get_animal_score(resolved_name))
Run Code Online (Sandbox Code Playgroud)
当我运行时,python utils/name_reports.py我收到以下异常
Traceback (most recent call last):
File "utils/name_reports.py", line 1, in <module>
import normalization.resolve_name as rn
ModuleNotFoundError: No module named 'normalization'
Run Code Online (Sandbox Code Playgroud)
我试图通过运行将当前包安装到虚拟环境站点包中来解决这个问题,pip install .但这意味着对于每个本地更改,我必须运行pip install --upgrade .以将我的本地更改移动到站点包中。
我一直在使用黑客-m unittest …
我在macOS Mojave 10.14.1版上使用Python 3.7.1
这是我的目录结构:
man/
Mans/
man1.py
MansTest/
SoftLib/
Soft/
SoftWork/
manModules.py
Unittests/
man1test.py
Run Code Online (Sandbox Code Playgroud)
man1.py包含以下导入语句,我不想更改它:
from Soft.SoftWork.manModules import *
Run Code Online (Sandbox Code Playgroud)
man1test.py包含以下导入语句:
from ...MansTest.SoftLib import Soft
from ...Mans import man1
Run Code Online (Sandbox Code Playgroud)
我需要第二次导入,man1test.py因为man1test.py需要访问中的函数man1.py。
我首次导入(Soft)的理由是为了促进前面提到的导入声明man1.py。
但是,与我的预期相反,其中的import语句man1.py导致:
ModuleNotFoundError: No module named 'Soft'
Run Code Online (Sandbox Code Playgroud)
当我跑步时
python3 -m man.MansTest.Unittests.man1test
Run Code Online (Sandbox Code Playgroud)
从man /上方的目录中。
有什么方法可以解决此错误,而无需更改import语句,man1.py 也无需在sys.path中添加任何内容?
编辑: …
python-import ×10
python ×8
import ×2
python-3.x ×2
function ×1
importerror ×1
ipython ×1
keras ×1
keras-layer ×1
module ×1
networking ×1
python-2.7 ×1
resolution ×1
sockets ×1