当前位置: 首页 > 面试题库 >

导入声明适用于PyCharm,但不适用于终端

周麒
2023-03-14
问题内容

Pycharm 2016.2.3,Mac OS X 10.11.1,Python 3.5(Homebrew);

我有这个文件夹结构

project
  /somepackage
    /subpackage
     __init__.py   
     bar.py
   __init__.py
   foo.py

foo.py:
import somepackage.subpackage.bar
print("foo")

bar.py:
print("bar")

所以我的预期输出是

bar
foo

从PyCharm运行时,此方法工作正常。但是,当我从终端运行它时,我收到一个ImportError:

$ pwd
$ /home/project (not the actual path; just omitting some personal stuff)
$ python3.5 somepackage/foo.py
File "foo.py", line 1, in <module>
import somepackage.subpackage.bar
ImportError: No module named 'somepackage'

我已经找到了这个问题,这是关于相同的问题。但是,没有建议的解决方案对我有用,因为我确实使用的是与PyCharm相同的Python解释器,并且我目前位于包含该somepackage/文件夹的文件夹中。

是否有人对如何解决此问题有其他建议?非常感谢你!


问题答案:

您正在像脚本一样运行foo.py,但实际上却像模块一样在使用它。因此,正确的解决方案是将其作为模块运行:

python3 -m somepackage.foo

作为记录,另一种选择是编辑路径,例如:

export PYTHONPATH=.

(或者,您可以在其中放置绝对目录,当然,您应该附加PYTHONPATH中已经存在的任何其他目录。)这与PyCharm的功能较为接近,但从哲学上讲不太正确。



 类似资料:
  • 作为标题,我不知道为什么他们在VSCode或Android Studio中的终端内置不起作用。 bash:flatter:未找到命令 我已经在~/中设置了Flutter路径。bash_profile.这里是的结果 /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dot net:~/。dot net/tools:/Appli

  • 问题内容: 嗨,我只是简单地尝试在www.example.com上获取h1标签,该标签显示为“ Example Domain”。该代码适用于http://www.example.com,但不适用于https://www.exmaple.com。我该如何解决这个问题?谢谢 问题答案: PhantomJSDriver不支持(所有)DesiredCapabilities。 你会需要: 记录在这里:htt

  • 所以我使用这种方法写入文件,它在windows上运行完全正常,但在mac上运行时,它会创建文件,但它们是空的。 我知道数据是正确的,因为它打印正确。感谢您的任何帮助,这真的让我绊倒了。

  • 两个无状态EJB及其远程接口。EJB1被注入EJB2 > EJB2还使用一些可选包(在其清单中声明) WebLogic应用服务器(10.3.3) 两个EJB被打包成两个单独的JAR文件 如果将两个JAR文件打包到一个EAR文件中并部署,则依赖注入工作。但是如果我单独部署它们,即使我首先部署了EJB1并在Weblogic(com.xxx.EJB1#com.xxx.layer1中验证了全局JNDI名称

  • 列名称的类型为int[] 上述查询适用于postgresql,但不适用于hsqldb,甚至适用于sql 尝试的hsqldb版本:2.2.9和2.3.0 在hsqldb中工作的sql是从table_name中选择x,unnest(column_name)y(x)x和y不是该表的列。

  • 问题内容: 我正在写一个使用GCM消息的游戏。当一名玩家进入转牌移动到服务器时,服务器将向其对手发送一条GCM消息,让客户知道有其他转弯数据可用。这应该很简单。我尽可能地遵循了示例GCM客户代码。 我有两个要测试的设备:带有4.4.0冰淇淋三明治的Motorola Xoom带有2.3.5版姜饼的Motorola X2 两种设备都有Goggle帐户设置(实际上是同一帐户)。我可以从两者的Play商店