sys.path上带有init导入名称的包可以在内部使用,但不能从外部使用

2024-10-01 17:41:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包我的脚本库,我想在机器上的任何地方使用。它有一个init.py:

from silo_functions import *

看起来

my_scripting_library
  -__init__.py
  -silo_functions.py
  -test_stuff.py

test_stuff.py看起来像:

#!/usr/bin/env python

from silo_functions import *

lines = read_lines('filepath.py')

print lines

在bashrc中:

export PYTHONPATH="${PYTHONPATH}:$LIBRARY"

其中LIBRARY是指向my_scripting_库的正确文件路径

In [1]: import sys

In [2]: sys.path
Out[2]: 
['',
 '/usr/bin',
 '/usr/lib/python2.7/site-packages/lxml-3.3.3-py2.7-linux-x86_64.egg',
 '/home/cchilders/scripts/python/my_scripting_library',
...
 '/home/cchilders/.ipython']

运行带有from .silo_functions import *原因的test_stuff:

Traceback (most recent call last):
  File "./test_stuff.py", line 3, in <module>
    from .silo_functions import *
ValueError: Attempted relative import in non-package

运行带有from my_scripting_library.silo_functions import *原因的test_stuff:

Traceback (most recent call last):
  File "./test_stuff.py", line 3, in <module>
    from my_scripting_library.silo_functions import *
ImportError: No module named my_scripting_library.silo_functions

但是用from silo_functions import *运行test_stuff是可行的:

它打印线条

当然,我不能使用其他文件夹中的这个包,这才是真正的问题——我不想被迫将所有脚本都放在这个地方。这造成了巨大的问题,因为我不断地重复使用每个脚本中的几十个函数,以及5个以上关于将文件夹制作成python包的教程,这些都是以前从未使用过的。为什么python路径上带有init的东西不是包?多谢各位


Tags: infrompytestimport脚本initmy
1条回答
网友
1楼 · 发布于 2024-10-01 17:41:29

可能是因为您在路径中添加了“…/python/我的脚本库”。但此文件夹中没有“my_scripting_library.py”

如果要使用“my_scripting_library.silo_函数”,请尝试向路径中添加”/home/cchilders/scripts/python'(而不是“/home/cchilders/scripts/python/my_scripting_library”)。 因为“我的脚本库”是模块。Python将找到这个文件夹,在这个文件夹中找到__init__.py,并将它标记为模块

相关问题 更多 >

    热门问题