sys.path 上的包,初始化导入名称,可以在内部使用,但不能从外部使用
package on sys.path, with init importing names, can be used internally, but not from outside it
我有一个包my_scripting_library我想在机器上的任何地方使用。它有一个 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_library
的正确文件路径
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']
运行 test_stuff 和 from .silo_functions import *
原因:
Traceback (most recent call last):
File "./test_stuff.py", line 3, in <module>
from .silo_functions import *
ValueError: Attempted relative import in non-package
运行 test_stuff 和 from my_scripting_library.silo_functions import *
原因:
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
但是 运行 test_stuff 与 from silo_functions import *
一起工作:
它打印行
当然我不能使用其他文件夹中的这个包,这是真正的问题 - 我不想被迫将所有脚本扔到这个地方。这导致了巨大的问题,因为我不断地在每个脚本中重复使用数十个函数,并且超过 5 个关于将文件夹制作为 python 包的教程从未奏效。为什么 python 路径上带有 init 的东西不是包?谢谢
可能是因为您在路径中添加了“.../python/my_scripting_library”。但是这个文件夹里没有'my_scripting_library.py'。
如果你想使用'my_scripting_library.silo_functions',尝试添加'/home/cchilders/scripts/python'(不是'/home/cchilders/scripts/python/my_scripting_library ') 到路径。
因为 'my_scripting_library' 是 模块 。 Python会找到这个文件夹,在这个文件夹中找到__init__.py
并标记为模块。
我有一个包my_scripting_library我想在机器上的任何地方使用。它有一个 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_library
的正确文件路径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']
运行 test_stuff 和 from .silo_functions import *
原因:
Traceback (most recent call last):
File "./test_stuff.py", line 3, in <module>
from .silo_functions import *
ValueError: Attempted relative import in non-package
运行 test_stuff 和 from my_scripting_library.silo_functions import *
原因:
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
但是 运行 test_stuff 与 from silo_functions import *
一起工作:
它打印行
当然我不能使用其他文件夹中的这个包,这是真正的问题 - 我不想被迫将所有脚本扔到这个地方。这导致了巨大的问题,因为我不断地在每个脚本中重复使用数十个函数,并且超过 5 个关于将文件夹制作为 python 包的教程从未奏效。为什么 python 路径上带有 init 的东西不是包?谢谢
可能是因为您在路径中添加了“.../python/my_scripting_library”。但是这个文件夹里没有'my_scripting_library.py'。
如果你想使用'my_scripting_library.silo_functions',尝试添加'/home/cchilders/scripts/python'(不是'/home/cchilders/scripts/python/my_scripting_library ') 到路径。
因为 'my_scripting_library' 是 模块 。 Python会找到这个文件夹,在这个文件夹中找到__init__.py
并标记为模块。