即使我使用 Python 工作这么久,我仍然偶尔会遇到包结构的问题。
我试图$ pipenv run pytest从下面的目录结构的根目录运行(即..上面的 src/)
src/
physics/
__init__.py
pathing.py
road/
tests/
__init__.py
test_traffic.py
__init__.py
traffic.py
__init__.py
main.py
Run Code Online (Sandbox Code Playgroud)
交通.py:
from physics import pathing
class Intersection():
...
class Vehicle():
...
Run Code Online (Sandbox Code Playgroud)
测试流量.py
from src.road.traffic import Intersection, Vehicle
def test_intersection():
...
Run Code Online (Sandbox Code Playgroud)
然而,我受到以下打击:
======================================================================= ERRORS ========================================================================
___________________________________________________ ERROR collecting src/road/tests/test_traffic.py ___________________________________________________
ImportError while importing test module '/Users/justian/scripts/py-traffic-sim/src/road/tests/test_traffic.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
src/road/tests/test_traffic.py:1: in <module>
from src.road.traffic import Intersection, Vehicle
src/road/traffic.py:13: in …Run Code Online (Sandbox Code Playgroud) 首先,stackoverflow 上有很多关于此问题的解决方案,但从我尝试过的解决方案来看,它们都不起作用。我正在远程机器(linux)上工作。我dir-2/module_2.py使用 ipython 解释器在文件中进行原型设计。另外,我试图避免使用绝对路径,因为该远程计算机中的绝对路径又长又难看,并且我希望我的代码在下载后在其他计算机上运行。
我的目录结构如下:
/project-dir/
-/dir-1/
-/__ init__.py
-/module_1.py
-/dir-2/
-/__ init__.py
-/module_2.py
-/module_3.py
Run Code Online (Sandbox Code Playgroud)
现在我想module_1从导入module_2。然而,这个 stackoverflow 帖子中提到的解决方案:使用链接
sys.path.append('../..')
import module_2
Run Code Online (Sandbox Code Playgroud)
不起作用。我收到错误:ModuleNotFoundError: No module named 'module_1'
此外,在 ipython 解释器中,会import .module_3抛出module_2错误:
Run Code Online (Sandbox Code Playgroud)import .module_3 ^ SyntaxError: invalid syntax
点运算符不是应该在同一目录中工作吗?总的来说,我对导入机制很困惑。非常感谢对最初问题的任何帮助!多谢!
我正在查看importPython 中的语句,并了解到 Python 遵循“仅导入一次”规则。
这意味着给定文件中引用同一模块的两个导入语句不会重新导入该模块。
我只是想知道,Python 使用这个规则的原因到底是什么?它是如何让 Python 程序变得更加高效的呢?
归根结底,如果程序员两次导入同一个模块,他就要为低效率负责(如果造成任何低效率)。两次导入如何导致效率低下?
sysv_ipc我希望以便携的方式使用该库。
我安装了它:
pip3 install sysv_ipc
然后从Python:
import sysv_ipc
sysv_ipc.__file__
# Output:
# /home/x/.local/lib/python3.9/site-packages/sysv_ipc.cpython-39-x86_64-linux-gnu.so
Run Code Online (Sandbox Code Playgroud)
如果我将该文件复制到文件夹(pip uninstall库),然后从该文件夹打开 python 并尝试相同的导入,则会失败。
我尝试检查还安装了哪些内容,结果发现:
/home/x/.local/lib/python3.9/site-packages/sysv_ipc-1.1.0.dist-info
/home/x/.local/lib/python3.9/site-packages/sysv_ipc.cpython-39-x86_64-linux-gnu.so
/home/x/.local/lib/python3.9/site-packages/sysv_ipc-1.1.0.dist-info/INSTALLER
/home/x/.local/lib/python3.9/site-packages/sysv_ipc-1.1.0.dist-info/LICENSE
/home/x/.local/lib/python3.9/site-packages/sysv_ipc-1.1.0.dist-info/METADATA
/home/x/.local/lib/python3.9/site-packages/sysv_ipc-1.1.0.dist-info/RECORD
/home/x/.local/lib/python3.9/site-packages/sysv_ipc-1.1.0.dist-info/REQUESTED
/home/x/.local/lib/python3.9/site-packages/sysv_ipc-1.1.0.dist-info/WHEEL
/home/x/.local/lib/python3.9/site-packages/sysv_ipc-1.1.0.dist-info/top_level.txt
Run Code Online (Sandbox Code Playgroud)
我也没有在setup.py中找到线索。
我想弄清楚的是——
sysv_ipcpip 如何/在哪里与要从该特定文件导入的Python 相关?
我分别在两个 jupyter 笔记本(N1 和 N2)中创建了两个数据帧(df1 和 df2)。
第一天,我使用下面的 store 命令在jupyter 笔记本中使用df1及其变量N2
%store -r df1
Run Code Online (Sandbox Code Playgroud)
但在第 25 天,我创建了一个新的 jupyter 笔记本N3并再次使用以下存储命令
%store -r df1
Run Code Online (Sandbox Code Playgroud)
而且它似乎很容易将数据帧的所有细节轻松地拉入jupyter笔记本df1中?N3
这是如何运作的?
它们不是仅对特定的 jupyter 笔记本会话有效吗?
那么我们是否可以只执行存储命令并随时轻松存储/检索它们,而不是将所有数据帧存储为文件?
在aiohttp我发现了许多带有import X as X. 为什么要这样做?
我有2个文件。一个名为 add_numbers.py。在那里我有以下代码:
def increase_number(num):
return num +10
Run Code Online (Sandbox Code Playgroud)
然后我有第二个文件,即我的主文件,我在其中导入函数,如下所示:
from add_numbers import increase_number
increase_number(3)
Run Code Online (Sandbox Code Playgroud)
当我更新的时候add_numbers.py时,也就是说,return num + 20 然后保存它,这些更改不会显示在主文件中,即它仍然使用旧值 10 并返回 13 而不是返回 23..除非我关闭并重新打开 vscode
有什么建议么?vscode 可能有 bug 或者我如何导入该函数?
编辑
我正在使用 ipykernel,更新似乎在重新启动内核后反映出来
我最近创建了一个简单的 python 包/库并将其上传到(PyPI)。没关系 - 我可以将我的项目上传到 pypi 并使用 pip 再次下载它,但我无法导入它,因为它包含一个句号.
我的包被调用dcode.py(这显然会导致导入问题),我想只需键入import dcode(不带)即可导入它.py。我已经四处寻找解决方案,但似乎找不到 - 我希望能够使用别名 ( dcode) 导入它,而不是dcode.py(这显然不起作用)。有没有办法做到这一点?我假设必须有(例如,两个包discord.py和py-cord都可以使用 导入import discord。有谁知道如何做到这一点?
以防万一您需要它,我的pyproject.toml文件如下所示:
[project]
name = "dcode.py"
version = "0.0.2"
authors = [
{ name = "Dylan Rogers", email = "opendylan@proton.me" },
]
description = "dcode - the Python package for everything"
readme = "README.md"
requires-python = ">=2.0"
classifiers = [
"Programming Language :: …Run Code Online (Sandbox Code Playgroud) 我想根据python中的变量值调用不同的导入.
通常我可以使用switch语句执行此操作,但是alas python没有...
我正在考虑有一个函数列表,每个函数都包含不同的导入,但是有更好的方法吗?是否可以以与方法类似的方式列出导入?或者将模块名称作为字符串存储在列表中,然后将它们转换为可用于导入它们的表单?
谢谢
这是Flask mega-tutorial的开场代码.
让我们首先为我们的应用程序包创建一个简单的init脚本(文件app/init .py):
Run Code Online (Sandbox Code Playgroud)from flask import Flask app = Flask(__name__) from app import views上面的脚本只是创建了应用程序对象(Flask类),然后导入了我们尚未编写的views模块.
我不确定这里发生了什么.如果app是一个类的实例,我们如何使用import它?这条线from app import views对我来说毫无意义.有人可以帮我理解这里发生的事情吗?为什么我们需要实例化一个类才能导入一些东西?
python-import ×10
python ×9
import ×3
module ×2
pip ×2
python-3.x ×2
dataframe ×1
flask ×1
pandas ×1
pypi ×1
pytest ×1
python-c-api ×1